我有这个数组:
Array
(
[702a4584] => Array
(
[type] => folder
[id] => 702a4584
)
[b547b3a9] => Array
(
[type] => folder
[id] => b547b3a9
)
[fcb0d055] => Array
(
[type] => page
[id] => fcb0d055
)
)
我想过滤数组,以便仅保留类型“文件夹”:
Array
(
[702a4584] => Array
(
[type] => folder
[id] => 702a4584
)
[b547b3a9] => Array
(
[type] => folder
[id] => b547b3a9
)
)
我可以做到这一点,但我需要一个通用函数:
$temp = array();
foreach($array as $key => $value)
{
if($value['type'] =="folder")
{
$temp[$key] = $value;
}
}
array_filter
:
$filtered = array_filter($array, function($v) { return $v['type'] == 'folder'; });
我遇到了一个奇怪的情况,可能对将来的某人添加到这里很有用,因为当我搜索它时,它指向了这篇文章。
我正在使用 Laravel,当我转储
@dump($myData)
我的二维数组时,它显示为数组内的数组。但是,我的 filter_array 逻辑不起作用。
经过几个小时的尝试调试它,我使用了老式的
var_dump($myData)
并发现内部数组不是一个数组 - 它由于某种原因被转换为一个对象。它返回给我以下错误:
Cannot use object of type stdClass as array
。
又挣扎了一会儿,直到我想出了两个替代方案:
假设物体:
$filteredArray = array_filter($originalArray, function ($arr) {
return $arr->id_filter_index === 101; // Working. For some reason, the $arr is an object.
});
强制数组转换:
$filteredArray = array_filter($originalArray, function ($arr) {
$arr = json_decode(json_encode($arr), true); // Force converting to array.
return $arr['id_filter_index'] === 101;
});
顺便说一句:
$originalArray
也被过滤了,不确定为什么内部数组变成了对象。如果有人有相关背景,请将其留在评论中。希望这可以为任何人节省宝贵的调试时间。
$input = Array(1,2,3,1,2,3,4,5,6);
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));