gpt4 book ai didi

php - array_diff 是如何工作的?

转载 作者:IT王子 更新时间:2023-10-28 23:46:36 25 4
gpt4 key购买 nike

array_diff() 是如何工作的?它显然不能像下面这样工作:

function array_diff($arraya, $arrayb)
{
$diffs = array();
foreach ($arraya as $keya => $valuea)
{
$equaltag = 0;
foreach ($arrayb as $valueb)
{
if ($valuea == $valueb)
{
$equaltag =1;
break;
}
}
if ($equaltag == o)
{
$diffs[$keya]=$valuea;
}

}
return $diffs;
} //couldn't be worse than this

有人知道更好的解决方案吗?

编辑@animuson:

function array_diff($arraya, $arrayb)
{
foreach ($arraya as $keya => $valuea)
{
if (in_array($valuea, $arrayb))
{
unset($arraya[$keya]);
}
}
return $arraya;
}

最佳答案

user187291 建议通过哈希表在 PHP 中执行此操作简直太棒了!从这个奇思妙想中汲取的肾上腺素激增,我什至找到了一种加快速度的方法(PHP 5.3.1):

function leo_array_diff($a, $b) {
$map = array();
foreach($a as $val) $map[$val] = 1;
foreach($b as $val) unset($map[$val]);
return array_keys($map);
}

使用从 user187291 的帖子中获取的基准:

LEO=0.0322  leo_array_diff()
ME =0.1308 my_array_diff()
YOU=4.5051 your_array_diff()
PHP=45.7114 array_diff()

即使每个数组有 100 个条目,array_diff() 的性能滞后也很明显。

注意:此解决方案意味着第一个数组中的元素是唯一的(或者它们将变得唯一)。这对于哈希解决方案来说很典型。

注意:该解决方案不保留索引。将原始索引分配给 $map,最后使用 array_flip() 保留键。

function array_diff_pk($a, $b) {
$map = array_flip($a);
foreach($b as $val) unset($map[$val]);
return array_flip($map);
}

PS:我在寻找一些 array_diff() 悖论时发现了这一点:如果在脚本中使用两次,对于几乎相同的任务,array_diff() 花费的时间要长三倍。

关于php - array_diff 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479963/

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