PHP中速记比较的动态计数
我有以下代码:PHP中速记比较的动态计数,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下代码: <?php $a = [ [ 'id' => 20, 'created_at' => '2020-11-22', 'updated_at' => '2020-11-22 11:16:22', 'name' => 'AA', ], [
<?php
$a = [
[
'id' => 20,
'created_at' => '2020-11-22',
'updated_at' => '2020-11-22 11:16:22',
'name' => 'AA',
],
[
'id' => 19,
'created_at' => '2020-11-27 11:16:22',
'updated_at' => null,
'name' => 'BB',
]
];
$b = [
[
'id' => 20,
'created_at' => '2020-11-22 11:16:11',
'updated_at' => '2020-11-22 11:16:22',
'name' => 'AA',
],
[
'id' => 19,
'created_at' => '2020-11-27 11:16:22',
'updated_at' => null,
'name' => 'BB',
]
];
function array_diff_by_keys(array $a, array $b)
{
$compare = function ($x, $y) {
return $x['id'] <=> $y['id'] ?:
$x['created_at'] <=> $y['created_at'] ?:
$x['updated_at'] <=> $y['updated_at']; // how to build dynamic?
};
return array_udiff($a, $b, $compare);
}
array_diff_by_keys($a, $b); // what i've got
array_diff_by_keys($a, $b, ['id', 'created_at', ...]); // what i want
您可以迭代要比较的键,获取$x
和$y
中相应值的差值,如果该差值不为零,则返回该差值;否则,请转到下一个关键点。此函数允许您不指定要比较的所需关键点,如果您不指定,则默认为每个元素中的所有关键点:
函数数组按键区分(数组$a、数组$b、数组$keys=null)
{
if(空($keys))$keys=数组_keys(重置($a));
$compare=函数($x,$y)使用($keys){
foreach($key作为$key){
$diff=$x[$key]$y[$key];
如果($diff)返回$diff;
}
返回$diff;
};
返回数组_udiff($a,$b,$compare);
}
输出(用于示例数据):
非常感谢。我只是在想这个循环,只是不知道如何咬它:-)
Array
(
[0] => Array
(
[id] => 20
[created_at] => 2020-11-22
[updated_at] => 2020-11-22 11:16:22
[name] => AA
)
)