按键比较两个数组,从第二个数组创建具有唯一值的第三个数组,并从第一个数组创建最小值


Compare two arrays by key, create third array with unique value from second array and minimal from first array

我有这个输出:

[1] => Array
    (
        [0] => 0            
        [2] => 0
        [14] => 0
        [1] => 28
        [12] => 167516
        [13] => 237120
    )
[2] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 2
        [12] => 11
        [13] => 11
        [14] => 11
    )

我需要这个结果:

[3] => Array
    (
        [0] => 1
        [2] => 2
        [14] => 11
    )

我知道我可以用$arr[3] = array_diff_key($arr[2], array_unique($arr[2]));来唯一数组中的值,但它们的键的值不是最小的。

假设您的数组被分配为$a1$a2。AFAIU,您需要$a1中那些具有零值的元素。

$a1 = array_filter($a1, function($el) { return $el === 0; });

现在我们将使数组相交以检索匹配项。不幸的是,PHP不允许我们选择要检索的值,它们将取自$a1:

$inter = array_intersect_key($a1, $a2);

现在我们应该选择最大值:

$result = array_map(function($e) use ($inter,$a2) { 
     $key = key($inter); next($inter); // we need key to lookup a2
     return $e > $a2[$key] ? $e : $a2[$key]; 
   }, $inter
);

希望能有所帮助。

UPD或者,无论您是否确定所有零值项目都来自$a1,您都可以简单地:

$a3 = array_intersect_key(
  $a2,
  array_filter($a1, function($el) { return $el === 0; }) 
);