我有一个多维数组,我正在通过它搜索特定值。如果找到这些值,我需要提取具有这些值的索引(创建新数组)并删除所有其他值。
array_intersect 在 php 5.3 上运行良好,现在在 5.4 上它抱怨 Notice: Array to string conversion。
我发现 array_intersect 在 5.4 上存在多维数组问题。 https://bugs.php.net/bug.php?id=60198
这是我正在搜索的 $options 数组
Array (
[index1] => html
[index2] => html
[index3] => slide
[index4] => tab
[index5] => Array
(
[0] => 123
)
)
适用于 php 5.3.x 的代码
$lookfor = array('slide', 'tab');
$found = array_intersect($options, $lookfor);
print_r($found);
Array
(
[index3] => slide
[index4] => tab
)
但在 5.4.x 中,这会引发上述错误。
请问没有循环的另一种方法是什么。并且不抑制错误。
谢谢!
原文由 Benn 发布,翻译遵循 CC BY-SA 4.0 许可协议
array_intersect()
不是递归的。该函数假定数组只有一层深,并期望所有数组元素都是标量。当它找到一个非标量值,即一个子数组时,它会抛出一个 Notice。array_intersect()
的文档 中含糊地提到了这一点:我能想到的一种解决方案是使用
array_filter()
:注意: 这仍然执行循环,并不比简单的
foreach
好多少。事实上,如果数组很大,它可能比foreach
慢。我不知道你为什么要避免循环——我个人认为如果你只使用循环会更干净。演示
我能想到的另一个解决方案是在使用之前删除子数组
array_intersect()
:演示