如何从多维数组中删除多列?

S S*_*S S 0 php arrays

我有一个如下所示的多维数组。

array:1 [
  0 => array:3 [
    "picture_id" => "0"
    "car_name" => "CA"
    "from" => "2020"
    "to" => "2020"
  ]
]
Run Code Online (Sandbox Code Playgroud)

我需要从上面的数组中删除from&to并以相同的结构返回结果。

我试过以下代码

    $whitelist = array("from", "to");
    $finalArray = [];
    foreach ($records as $record) {
        foreach ($record as $key => $item) {
            if (!in_array($key, $whitelist)) {
                $finalArray[$key] = $item;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我得到的结果不是这样的多维数组:

array:1 [
  "picture_id" => "0"
  "car_name" => "CA"
]
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

array:1 [
  0 => array:3 [
    "picture_id" => "0"
    "car_name" => "CA"
  ]
]
Run Code Online (Sandbox Code Playgroud)

Jur*_*reW 5

你可以尝试这样的事情:

$array = [
   [
    "picture_id" => "0",
    "car_name" => "CA",
    "from" => "2018",
    "to" => "2020"
  ],
       [
    "picture_id" => "1",
    "car_name" => "WA",
    "from" => "2010",
    "to" => "2019"
  ]
];

    $whitelist = array("from", "to");
    $finalArray = [];
    foreach ($array as $k =>  $record) {
        foreach ($record as $key => $item) {
            if (!in_array($key, $whitelist)) {
                $finalArray[$k][$key] = $item;
            }
        }
    }
print("<pre>".print_r($finalArray,true)."</pre>");
Run Code Online (Sandbox Code Playgroud)

会打印出什么:

Array
(
    [0] => Array
        (
            [picture_id] => 0
            [car_name] => CA
        )

    [1] => Array
        (
            [picture_id] => 1
            [car_name] => WA
        )

)
Run Code Online (Sandbox Code Playgroud)

一个简短的解释......基本上你在多维数组上循环

foreach($array as $key => $value)
Run Code Online (Sandbox Code Playgroud)

其中 value 是“inner”数组,所以为了从内部删除一些元素,并创建一个新的多维数组,你必须使用原始数组中的键,就像我的例子一样。所以你实际上制作了一个数组,如:

$newArray[$key] = $innerArray
Run Code Online (Sandbox Code Playgroud)

这为您提供了多维数组。BR