首页 > 解决方案 > PHP - 优雅地提取数组 a 中不在数组 b 中的数字索引(不是 array_diff_key)

问题描述

假设你有两个数组$a=array('apple','banana','canaple');$b=array('apple');你如何(优雅地)提取数组 a 中不在数组 b 中的元素的数字索引?(在这种情况下,索引:1 和 2)。

在这种情况下,数组 a 的元素总是比 b 多。

请注意,这不是要求array_diff_key,而是数组中具有更多元素的数字索引,这些元素在具有较少元素的数组中不存在。

标签: php

解决方案


array_diff让你走到一半。在 diff 上使用array_keys可以让你得到你想要的其他东西。

$a = ['apple','banana','canaple'];
$b = ['apple'];
$diff = array_diff($a, $b);
$keys = array_keys($diff);

var_dump($keys); // [1, 2]

这是因为array_diff从第一个数组返回元素和它的键。如果你想编写一个 PHP 实现,array_diff它可能看起来像这样......

function array_diff(Array ... $arrays) {
    $return = [];

    $cmp = array_shift($arrays);

    foreach ($cmp as $key => $value) {

        foreach($arrays as $array) {

            if (!in_array($value, $array)) {
                $return[$key] = $value;
            }

        }
    }

    return $return;
}

这让您了解如何实现结果,但在内部 php 将其作为一种实现,因为它比上述实现要快得多。


推荐阅读