我有这个输出:
[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; })
);