说,我有一个具有以下结构的数组:
Array
(
[0] => Array
(
[0] => data
[1] => data
[2] => data
[3] => Array
(
[0] => data
[thatbastard] => Array
(
[0] => Array
(
[0] => data
[1] => data
[2] => data
[3] => data
)
[1] => Array
(
[0] => data
[1] => data
[2] => data
[3] => data
)
[2] => Array
(
[0] => data
[1] => data
[2] => data
[3] => data
)
)
[2] => data
)
[4] => Array
(
[0] => data
[thatbastard] => Array
(
[0] => Array
(
[0] => data
[1] => data
[2] => data
[3] => data
)
[1] => Array
(
[0] => data
[1] => data
[2] => data
[3] => data
)
[2] => Array
(
[0] => data
[1] => data
[2] => data
[3] => data
)
)
[2] => data
)
)
[1] => Array(similar to [0])
)
我想在整个数组上删除[thatbastard],所以我的数组将如下所示:
Array
(
[0] => Array
(
[0] => data
[1] => data
[2] => data
[3] => Array
(
[0] => data
[2] => data
)
[4] => Array
(
[0] => data
[2] => data
)
)
[1] => Array(similar to [0])
)
我已经广泛搜索了提示,但是大多数都使用key_by_value搜索。就我而言,我不在乎价值,我想通过特定的键摆脱数据。
我尝试了基于this topic并具有递归功能的解决方案:
public function filterList($arr, $remove_key)
{
foreach ($arr as $key => $value)
{
if (is_array($value)) {
$filtered[$key] = $this->filterList($value, $remove_key);
}
else
{
if ($key != $remove_key)
{
$filtered[$key] = $value;
}
}
}
return $filtered;
}
但是它提供与原始数组相同的输出。
我已经尝试过this solution,但是显然我的数组的深度级别太多,无法弄清楚如何改善代码。
问题是我想编写一些可以与不同数组一起使用的多任务功能,而不仅仅是示例。
答案 0 :(得分:2)
您可以使用PHP array_filter documentation中的array_filter_recursive函数。这将适用于任何多维数组。
<?php
$sweet = array('a' => 'Apple', 'b' => 'Banana');
$fruits = array('sweet' => $sweet, 'sour' => 'Lemon');
function array_filter_recursive($input, $callback = null)
{
foreach ($input as &$value)
{
if (is_array($value))
{
$value = array_filter_recursive($value, $callback);
}
}
return array_filter($input, $callback, ARRAY_FILTER_USE_BOTH);
}
$result = array_filter_recursive($fruits, function ($value, $key) {
return ($key != 'b');
});
var_dump($result);
答案 1 :(得分:1)
这是一种方法。 可能不是最好的方法,但是它将为您提供所需的结果。
foreach($array1 as $key1 => $array2) {
foreach($array2 as $key2 => $array3) {
foreach($array3 as $key3 => $data) {
if($key3 == 'thatbastard') unset($array1[$key1][$key2][$key3]);
}
}
}
值得注意的是,这依赖于数组的第三层,这是唯一具有该名称的键的层。如果密钥可以在多个级别,那么您将需要调整此代码以在这些不同级别上运行unset命令。
要使此功能适合您,只需将$ array1更改为数组的名称,并保留所有其他变量不变。