2017-12-27 376 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); 
    } 
}