array_diff_assoc()或foreach()?哪个更快?

时间:2018-05-22 06:01:22

标签: php

我有两个数组,例如$session$post,其中包含100个以上的值。我将$post数组值与$session数组进行比较。如果post不同,那么它将被用于结果数组。

我们可以使用array_diff_assoc($post, $session) and foreach()尝试此操作。哪一个更快?

2 个答案:

答案 0 :(得分:1)

为了进行剖析,Phil在他的回复中提出了一个很好的方法,但我也会在这里链接它,以防万一: Simplest way to profile a PHP script

实际上,您需要知道每种方法的作用。在array_diff_assoc中,在比较每个元素的键/值对后,您将返回2个集合之间的差异。然后它将返回一个数组,其中包含array1中不存在于array2或array3中的条目等。

在每个循环中,您需要对相同的功能进行硬编码(假设您需要的是什么)。您需要获取第一个元素,然后在其他数组中查找组合。如果它符合您的要求,您将把它保存到输出数组中,甚至直接打印出来。

同样的原则适用,但是再次,将由分析来确定更快的方法。尝试在大量的大阵列上这样做,因为差异在较小的范围内并不明显。

答案 1 :(得分:0)

我将此保留为存根/示例,请编辑或用于分析。

<?php

$before = [
    'name' => 'Bertie',
    'age' => '23'
];
$after  = [
    'name' => 'Harold',
    'age' => '23',
    'occupation' => 'Bus driver' 
];

function changed_1($after, $before) {
    return array_diff_assoc($after, $before);
}

function changed_2($after, $before) {
    $changed = [];
    foreach($after as $k => $v) {
        if(isset($before[$k]) && $before[$k] !== $v)
            $changed[$k] = $v;
        if(!isset($before[$k]))
            $changed[$k] = $v;
    }

    return $changed;
}

var_export(changed_1($after, $before));
var_export(changed_2($after, $before));

输出:

array (
  'name' => 'Harold',
  'occupation' => 'Bus driver',
)array (
  'name' => 'Harold',
  'occupation' => 'Bus driver',
)