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