php - PHP - 优雅地提取数组 a 中不在数组 b 中的数字索引(不是 array_diff_key)
问题描述
假设你有两个数组$a=array('apple','banana','canaple');
,$b=array('apple');
你如何(优雅地)提取数组 a 中不在数组 b 中的元素的数字索引?(在这种情况下,索引:1 和 2)。
在这种情况下,数组 a 的元素总是比 b 多。
请注意,这不是要求array_diff_key
,而是数组中具有更多元素的数字索引,这些元素在具有较少元素的数组中不存在。
解决方案
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 将其作为一种实现,因为它比上述实现要快得多。
推荐阅读
- jmeter - 处理控制器时面临的问题
- python - 在 python Plotly 仪表板中的绘图内拖动一个圆圈
- c# - Microsoft Dynamics CRM 注释实体错误的“创建者”字段值
- python - 在 aws-s3 中创建大压缩文件并返回到 S3 python
- c - 如何使用 bison/flex 在 C 代码的头文件中解析自定义数据类型的类型?
- javascript - 旋转卡动画故障
- reactjs - 我尝试从 firestore 获取一次数据,但我为集合中的每个文档接收三次
- javascript - 即使在浏览器中禁用 JavaScript 也提交 Ajax 表单?
- firebase - Flutter/Firebase:如何减少对推送/弹出调用的 StreamBuilder 调用?
- javascript - 简化不等于 && 条件