Php 按键比较两个数组,使用第二个数组中的唯一值和第一个数组中的最小值创建第三个数组
我有以下输出:Php 按键比较两个数组,使用第二个数组中的唯一值和第一个数组中的最小值创建第三个数组,php,arrays,Php,Arrays,我有以下输出: [1] => Array ( [0] => 0 [2] => 0 [14] => 0 [1] => 28 [12] => 167516 [13] => 237120 ) [2] => Array ( [0] => 1 [1] => 2
[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; })
);
谢谢你的帮助。当我将{return$el==0;}更改为{return$el==0;}时,它对我起了作用。不客气。必须将===
更改为==
意味着您的数组包含的金额是字符串,而不是整数。如果最小元素之一等于例如“2”,而不是“零”,该怎么办。我能做些什么来保留最小值“2”,而不仅仅是零?返回$elБааааааааааааааааааааааааааааааааааа1072