从数组数组过滤唯一值

时间:2019-11-15 01:51:40

标签: php

有没有一种方法可以改善此php代码?

<?php

require __DIR__ . '/vendor/autoload.php';

$unique_emails = [];

$big_array_full_of_emails = [
    array('skywalker1@dagobah.jedi', 'chewbacca1@wookies.win'),
    array('skywalker1@dagobah.jedi', 'chewbacca1@wookies.win'),
    array('skywalker2@dagobah.jedi', 'chewbacca2@wookies.win'),
    array('skywalker3@dagobah.jedi', 'chewbacca3@wookies.win'),
    array('skywalker4@dagobah.jedi', 'chewbacca4@wookies.win'),
    array('skywalker5@dagobah.jedi', 'chewbacca5@wookies.win'),
];

foreach ($big_array_full_of_emails as $arr) {
    foreach ($arr as $email) {
        if (!in_array($email, $unique_emails)) {
            $unique_emails[] = $email;
        }
    }
}

var_dump($unique_emails);

@little_coder-Kris Roofe发表了我所寻找的想法。只是在寻找可能更有效或更清晰的方法来执行逻辑。

1 个答案:

答案 0 :(得分:0)

您可以使用Demo

$result = array_unique(array_reduce($big_array_full_of_emails,"array_merge",[]));

您还可以通过更高效的方式来做到这一点,

$result = [];
array_walk_recursive($big_array_full_of_emails,function($v)use(&$result){$result[$v] = $v;});

如果要使用序列索引,只需添加$result = array_values($result);