[英]How to extract max value of a subarray and keep the keys of the parent array?
我有以下數組:
Array
(
[0] => Array
(
[0] => 2000
[1] => 401
)
[1] => Array
(
[0] => 2000
[1] => 317
)
[2] => Array
(
[0] => 2000
[1] => 301
)
[3] => Array
(
[0] => 2002
[1] => 285
)
[4] => Array
(
[0] => 2002
[1] => 277
)
[5] => Array
(
[0] => 2002
[1] => 271
)
[6] => Array
(
[0] => 2001
[1] => 208
)
[7] => Array
(
[0] => 2001
[1] => 263
)
[8] => Array
(
[0] => 2001
[1] => 262
)
[9] => Array
(
[0] => 2000
[1] => 258
)
)
然后,我編寫了以下代碼來對其值進行分組:
$result06 = array();
foreach ($chart06 as $el) {
if (!array_key_exists($el[0], $result06)) {
$result06[$el[0]] = array();
}
$result06[$el[0]][] = $el[1];
}
這樣,我們收到以下結果:
Array
(
[2000] => Array
(
[0] => 401
[1] => 317
[2] => 301
[3] => 258
)
[2002] => Array
(
[0] => 285
[1] => 277
[2] => 271
)
[2001] => Array
(
[0] => 208
[1] => 263
[2] => 262
)
)
現在,如何提取每個子數組的最大值並將其轉換為“平坦”數組,如下所示?
Array
(
[2000] => 401
[2002] => 285
[2001] => 263
)
我嘗試了這個:
foreach ($result06 as $value){
$resultMax[] = max($value);
}
但是結果是:
Array
(
[0] => 401
[1] => 285
[2] => 263
)
但是我真的需要原始密鑰是相同的。
我將不勝感激任何幫助!
您可以像下面這樣在foreach
循環中獲取密鑰:
foreach ($result06 as $key => $value){
$resultMax[$key] = max($value);
}
跳過創建分組數組的中間步驟:
$result06 = array();
foreach ($chart06 as $el) {
if (!isset($result06[$el[0]])) {
$result06[$el[0]] = 0;
}
$result06[$el[0]] += el[1];
}
僅將最大值插入第一位:
foreach ($chart06 as $el) {
if (!array_key_exists($el[0], $result06)) {
$result06[$el[0]] = $el1;
} else {
$result06[$el[0]] = max($result06[$el[0]], $el[1]);
}
}
我同意AbraCadaver,您絕對可以省去通過標識符對值進行分組的中間步驟。
您只需要迭代原始輸入數組並確定:
代碼:( 演示 )
$array = [
[2000, 401],
[2000, 317],
[2000, 301],
[2002, 285],
[2002, 277],
[2002, 271],
[2001, 208],
[2001, 263],
[2002, 285],
[2001, 262],
[2000, 258]
];
foreach ($array as $row) {
$id = $row[0]; // just to improve readability
if (!isset($result[$id]) || $result[$id] < $row[1]) { // first occurrence or less than current
$result[$id] = $row[1]; // store the current value
}
}
var_export($result);
輸出:
array (
2000 => 401,
2002 => 285,
2001 => 263,
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.