array_diff如何工作?

array_diff如何工作?,第1张

array_diff如何工作?

更新

  • [请参阅下面的更快/更好的代码。

  • array_diff的行为在PHP 5.3.4中要好得多,但仍比Leo的函数慢10倍。

  • 还值得注意的是,这些函数并不严格等同于

    array_diff
    它们,因为它们不维护数组键,即
    my_array_diff(x,y) == array_values(array_diff(x,y))

/更新

更好的解决方案是使用哈希映射

function my_array_diff($a, $b) {    $map = $out = array();    foreach($a as $val) $map[$val] = 1;    foreach($b as $val) if(isset($map[$val])) $map[$val] = 0;    foreach($map as $val => $ok) if($ok) $out[] = $val;    return $out;}$a = array('A', 'B', 'C', 'D');$b = array('X', 'C', 'A', 'Y');print_r(my_array_diff($a, $b)); // B, D

基准

function your_array_diff($arraya, $arrayb){    foreach ($arraya as $keya => $valuea)    {        if (in_array($valuea, $arrayb))        { unset($arraya[$keya]);        }    }    return $arraya;}$a = range(1, 10000);$b = range(5000, 15000);shuffle($a);shuffle($b);$ts = microtime(true);my_array_diff($a, $b);printf("ME =%.4fn", microtime(true) - $ts);$ts = microtime(true);your_array_diff($a, $b);printf("YOU=%.4fn", microtime(true) - $ts);

结果

ME =0.0137YOU=3.6282

任何问题?;)

而且,只是为了好玩,

$ts = microtime(true);array_diff($a, $b);printf("PHP=%.4fn", microtime(true) - $ts);

结果

ME =0.0140YOU=3.6706PHP=19.5980

这是令人难以置信的!



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5441426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存