我有一个动态构建的数组。由于它的构建方式,它有许多嵌套数组,但是深度对我来说没用,所以我在之后组织它。它可能看起来像这样:
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[index] => -1
[cost] => 0.189956571618
)
)
)
)
[1] => Array
(
[index] => -1
[cost] => 2.18650011647
)
)
我想几乎展平这个数组(即在所有条目上使用 $array[$i]['cost'] 访问它的数据,无论它们在我处理它们之前是否嵌套很深)。到目前为止,我一直在使用 SPL 递归,其中包含以下内容:
function flatten($array) {
$return = array();
$it = new RecursiveIteratorIterator(new ParentIterator(new RecursiveArrayIterator($array)), RecursiveIteratorIterator::SELF_FIRST);
foreach($it as $value) {
if(isset($value['cost'])) {
$return[] = $value;
}
}
return $return;
}
它在大多数情况下都有效,但是原始数组中的某些值(其中确实有一个“成本”索引)无法添加到新数组中,因为它们本身是作为嵌套数组传递的,如下所示:
Array
(
[0] => Array
(
[index] => -1
[cost] => 0.189956571618
)
[1] => Array
(
[index] => -1
[cost] => 2.18650011647
)
)
...而不仅仅是(大多数时候我得到):
Array
(
[index] => -1
[cost] => 0.189956571618
)
我认为使用 RecursiveIterator 的全部意义在于深入数组并获取其中没有数组的条目(即我想要的“值”)。我是否为这项工作使用了错误的工具?如果是这样,循环遍历我不知道深度的数组会更合适吗?如果 SPL 是要走的路,我做错了什么?
提前致谢。