PHP - 优雅地提取数组 a 中不在数组 b 中的数字索引(不是 array_diff_key)

ina*_*ina 2 php

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

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

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

She*_*rif 5

array_diff让你走到一半。array_keys在差异上使用可以获得你想要的其余部分。

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

var_dump($keys); // [1, 2]
Run Code Online (Sandbox Code Playgroud)

这是因为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;
}
Run Code Online (Sandbox Code Playgroud)

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