2017-12-27 351 views
1

我有这样的阵列比较两个嵌套数组则保持较小的值

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

然后我试图比较每个嵌套数组键的值,并只保留较小的一个,来获得这种阵列

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

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

你有一些线索可以做到吗?

+3

请告诉我们您尝试过哪些方法无效。 –

+0

你是什么意思“只保留小一点”? – gkalikapersaud

回答

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如果该键尚未设定。

+0

很好的答案。 OP将需要有PHP 7使用?? – Mikey

+0

谢谢!确实如此。我曾经为PHP 7的东西添加免责声明,但时间越长,我就越少。 –

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); 
    } 
}