Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组_diff_assoc()或foreach()?哪个更快?_Php - Fatal编程技术网

Php 数组_diff_assoc()或foreach()?哪个更快?

Php 数组_diff_assoc()或foreach()?哪个更快?,php,Php,我有两个数组,例如带有100+个值的$session和$post。我将比较$post数组值与$session数组。如果post不同,则它将被带到结果数组,否则不会 我们可以使用array\u diff\u assoc($post$session)和foreach()。哪一个更快?对于评测,Phil在他的回答中提出了一个很好的方法,但我也将其链接到这里,以防万一: 实际上,您需要知道每种方法的作用。在array_diff_assoc中,在比较每个元素的键/值对之后,返回两个集合之间的差异。然后,

我有两个数组,例如带有100+个值的
$session
$post
。我将比较
$post
数组值与
$session
数组。如果post不同,则它将被带到结果数组,否则不会


我们可以使用
array\u diff\u assoc($post$session)和foreach()。哪一个更快?

对于评测,Phil在他的回答中提出了一个很好的方法,但我也将其链接到这里,以防万一:

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

在for-each循环中,您需要硬编码相同的函数(假设您需要硬编码)。您需要获取第一个元素,然后在其他数组中查找组合。如果它符合您的要求,您将把它保存到输出数组中,甚至直接打印它


同样的原则也适用,但同样的,这将取决于分析来确定更快的方法。尝试在大量大型阵列上执行此操作,因为在较小规模下差异不明显。

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

<?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));

你的问题呢?为什么不试试看哪个更快~@Phil我试过了。PHP_函数看起来比foreach()慢。我在这里放了一些代码,其中包含4000多个条目,所有不同的值(最坏的情况)。忽略其Evaluator上的结果,以不同的方式运行您自己或配置文件。对我来说,阵列的速度更快。
array (
  'name' => 'Harold',
  'occupation' => 'Bus driver',
)array (
  'name' => 'Harold',
  'occupation' => 'Bus driver',
)