gpt4 book ai didi

php - 如果出现多次,如何从数组中删除值?

转载 作者:可可西里 更新时间:2023-11-01 00:02:00 24 4
gpt4 key购买 nike

我需要从数组中删除在数组中出现多次的值。

例如:

$value = array(10,10,5,8);

我需要这个结果:

$value = array(5,8);

php有内置函数吗?

我试过了,但这不会返回我预期的结果:

$unique = array_unique($value);
$dupes = array_diff_key($value, $unique);

最佳答案

如果愿意,您可以使用数组函数并放弃 foreach 循环:

这是一个单行:

代码:

$value = [10, 10, 5, 8];
var_export(array_keys(array_intersect(array_count_values($value),[1])));

作为多行:

var_export(
array_keys(
array_intersect(
array_count_values($value),
[1]
)
)
);

输出:

array (
0 => 5,
1 => 8,
)

这会将值计数作为一个数组,然后使用 array_intersect() 仅保留出现一次的值,然后将键转换为零索引数组的值。

上面的代码片段与@modsfabio 和@axiac 的答案相同。我的代码片段的唯一优势是简洁。他们的解决方案有可能胜过我的解决方案,但在相对较小的数据集上判断速度可能会浪费开发时间。对于处理相对较大数据集的任何人,请进行自己的基准测试以找到最有效的技术。


为获得最低的计算/时间复杂度,请使用单个循环并在迭代时根据需要有条件地填充查找数组和 unset()

代码:(Demo)(Crosslink to my CodeReview answer)

$values = [10, 10, 5, 8];

$found = [];
foreach ($values as $index => $value) {
if (!isset($found[$value])) {
$found[$value] = $index;
} else {
unset($values[$index], $values[$found[$value]]);
}
}
var_export($values);
// [2 => 5, 3 => 8]

一些注意事项:

  1. 如果处理浮点值,使用一种将值存储为键的技术(正如我所有的代码片段所做的那样),那么结果可能不正确,因为 php 将浮点值用作键时将 float 更改为整数。
  2. PHP 搜索键的速度始终比搜索值快得多。

关于php - 如果出现多次,如何从数组中删除值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com