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

时间:2015-02-08 15:39:37

标签: php arrays

我有这个输出:

[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]));在数组中使用唯一值,但是它们的键值不是最小值。

1 个答案:

答案 0 :(得分:0)

假设您已将阵列分配为$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; }) 
);