我的数组与下面的数组没有太大区别(带有更多的子数组)。在其下方有任意数量的子数组和任何级别的数组。但是,只有这么多层次。
比方说,我想带回所有独特的宠物(在[1]中),该怎么做?同样,如果我想要所有独特的颜色(在[2]中)或所有独特的汽车[在[3]中]
我尝试了How to remove duplicate values from a multi-dimensional array in PHP和其他类似SO页面上的解决方案,但进展很快,现在又回到了空白页面
有什么建议吗?
Array
(
[0] => Array
(
[0] => Array
(
[0] => Jo Bloggs
[1] => Cat
[2] => Red
[3] => Nissan
)
[1] => Array
(
[0] => Patrick
[1] => Dog
[2] => Blue
[3] => Nissan
)
)
[1] => Array
(
[0] => Array
(
[0] => Charloe
[1] => Moose
[2] => Green
[3] => Ford
)
[1] => Array
(
[0] => Patrick
[1] => Dog
[2] => Blue
[3] => Porsche
)
)
...
答案 0 :(得分:3)
PHP提供了广泛的便捷功能来处理数组。我强烈建议您深入阅读官方文档并开始自己创作: http://php.net/manual/en/ref.array.php
这是您使用两个这样的函数要求的实际算法的简单示例:
<?php
$input = [
[
[
0 => "Jo Bloggs",
1 => "Cat",
2 => "Red",
3 => "Nissan"
],
[
0 => "Patrick",
1 => "Dog",
2 => "Blue",
3 => "Nissan"
],
],
[
[
0 => "Charloe",
1 => "Moose",
2 => "Green",
3 => "Ford"
],
[
0 => "Patrick",
1 => "Dog",
2 => "Blue",
3 => "Porsche"
]
]
];
$aspect = 1;
$output = [];
array_walk_recursive($input, function($value, $key) use ($aspect, &$output) {
if ($key == $aspect) {
$output[] = $value;
}
});
print_r(array_unique($output));
以上代码的输出显然是:
Array
(
[0] => Cat
[1] => Dog
[2] => Moose
)
可以通过$aspect
变量控制滤除哪种类型的元素,该变量包含您要用来识别匹配项的键。
很明显,还有其他方法可以解决您的问题,这只是一个简单的示例。例如,可能还希望只接受$output
数组中的唯一值,这样可以将最终调用保存到array_unique()
...