[英]PHP array group by value & min-max
我需要幫助合並 PHP 中的數組,我有這個數組,我正在嘗試按model分組項目並合並年份的最小值和最大值:
[0] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2006
)
[1] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2007
)
[2] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2008
)
[3] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2011
)
[4] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2012
)
[5] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2006
)
[6] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2007
)
[7] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2008
)
我想按model分組項目並合並year的最小值和最大值,如下所示:
[0] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2006 - 2008
)
[1] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2011 - 2012
)
[2] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2006 -2008
)
我知道如何按 model 對項目進行分組,但我無法實現合並年份:
foreach($array as $row){
$newArray[$row["model"]] = array(
"brand" => $row["brand"],
"model" => $row["model"],
"year" => $row["year"]
);
}
感謝您的任何幫助。
這將其分為兩個階段,首先收集每個項目的最小和最大年份的數據。 設置最小值和最大值時,它會檢查先前的值(如果未找到則默認設置)並應用適當的min()
或max()
...
$newArray = [];
foreach($array as $row){
$newArray[$row["model"]] = array(
"brand" => $row["brand"],
"model" => $row["model"],
"minyear" => min($newArray[$row["model"]]["minyear"] ?? PHP_INT_MAX, $row["year"]),
"maxyear" => max($newArray[$row["model"]]["maxyear"] ?? PHP_INT_MIN, $row["year"]),
);
}
這會產生...
Array
(
[GSF 1250 Bandit] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[minyear] => 2006
[maxyear] => 2008
)
[GSX 1250FA] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[minyear] => 2011
[maxyear] => 2012
)
)
然后,您可以處理它以提供您所追求的格式的年份(刪除不再使用的字段)...
foreach ( $newArray as &$row ) {
$row['year'] = $row['minyear'] . " - ". $row['maxyear'];
unset ( $row['minyear'], $row['maxyear'] );
}
產生...
Array
(
[GSF 1250 Bandit] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2006 - 2008
)
[GSX 1250FA] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2011 - 2012
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.