我有两个数组,例如$session
和$post
,其中包含100个以上的值。我将$post
数组值与$session
数组进行比较。如果post不同,那么它将被用于结果数组。
我们可以使用array_diff_assoc($post, $session) and foreach()
尝试此操作。哪一个更快?
答案 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',
)