PHP:从多维关联数组中查找不同的值

时间:2018-12-14 19:56:44

标签: php arrays

我的数组与下面的数组没有太大区别(带有更多的子数组)。在其下方有任意数量的子数组和任何级别的数组。但是,只有这么多层次。

比方说,我想带回所有独特的宠物(在[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
                )
        )
...

1 个答案:

答案 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() ...