比较两个嵌套数组然后保持较小的值

时间:2017-12-27 15:58:37

标签: php arrays

我有这个数组

[
    'foo' => [
        '.fr' => 15,
        '.com' => 10,
        '.de' => 20,
    ],
    'bar' => [
        '.fr' => 12,
        '.com' => 16,
        '.de' => 18,
    ],
]

然后我尝试比较每个嵌套数组键的值,只保留较小的数组,以获得这种数组

[
    '.fr' => 12,
    '.com' => 10,
    '.de' => 18,
]

我尝试了一些foreach但没有成功,但我不知道该走哪条路。

你有这方面的线索吗?

2 个答案:

答案 0 :(得分:2)

我会这样做。

foreach ($your_array as $sub_array) {
    foreach ($sub_array as $key => $value) {
        $minimums[$key] = min($value, $minimums[$key] ?? PHP_INT_MAX);
    }
}

基本上,如果找到相应键的较低值,则迭代子数组的每个值并替换结果数组中的值。

min的第二个参数是这个表达式:$minimums[$key] ?? PHP_INT_MAX,如果该密钥尚未设置,则使用$minimums[$key]获取PHP_INT_MAX的现有值

答案 1 :(得分:1)

$arrays = [
    'foo' => [
        '.fr' => 15,
        '.com' => 10,
        '.de' => 20,
    ],
    'bar' => [
        '.fr' => 12,
        '.com' => 16,
        '.de' => 18,
    ],
];

$output = [];

foreach ($arrays as $nestedArray) {
    foreach($nestedArray as $key => $value) {
        $output[$key] = (array_key_exists($key, $output) ? min($output[$key], $value) : $value);
    }
}