![](/img/trans.png)
[英]Get the highest value from multidimensional array based on mentioned array in php
[英]How do I get the highest value from value in PHP multidimensional array?
我在 php 中有數據
$data = [
["tahun" => 2001, "bulan" => 1, "pembetulan" => 0],
["tahun" => 2002, "bulan" => 1, "pembetulan" => 0],
["tahun" => 2002, "bulan" => 1, "pembetulan" => 1],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 0],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 1],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 2],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 3],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 4],
["tahun" => 2003, "bulan" => 2, "pembetulan" => 0]
];
我如何獲得每個tahun
和bulan
的最高pembetulan
數據?
<?php
$data = [
["tahun" => 2001, "bulan" => 1, "pembetulan" => 0],
["tahun" => 2002, "bulan" => 1, "pembetulan" => 0],
["tahun" => 2002, "bulan" => 1, "pembetulan" => 1],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 0],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 1],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 2],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 3],
["tahun" => 2003, "bulan" => 1, "pembetulan" => 4],
["tahun" => 2003, "bulan" => 2, "pembetulan" => 0]
];
$tahun = array();
$bulan = array();
$pembetulan = array();
foreach($data as $group){
if(!in_array($group['tahun'], $tahun)){
$tahun[] = $group['tahun'];
}
if(!in_array($group['bulan'], $bulan)){
$bulan[] = $group['bulan'];
}
}
$maxValue_t = 0;
$maxValue_b = 0;
foreach($data as $value){
foreach($tahun as $t){
if($value['tahun'] == $t){
if($maxValue_t < $value['pembetulan']){
$maxValue_t = $value['pembetulan'];
}
$pembetulan['tahun'][$t] = $maxValue_t;
}
}foreach($bulan as $b){
if($value['bulan'] == $b){
if($maxValue_b < $value['pembetulan']){
$maxValue_b = $value['pembetulan'];
}
$pembetulan['bulan'][$b] = $maxValue_b;
}
}
}
echo "<pre>";print_r($pembetulan);die;
//Output
Array
(
[tahun] => Array
(
[2001] => 0
[2002] => 1
[2003] => 4
)
[bulan] => Array
(
[1] => 4
[2] => 4
)
)
請檢查這是否對您有幫助。
填充基於唯一標識所需分組的兩列臨時分配關聯第一級鍵的結果數組。
迭代時,如果結果數組中不存在標識鍵,或者保留的pembetulan
小於當前迭代行的pembetulan
值,則將當前行保存在結果中。
完成迭代后,使用array_values()
刪除臨時的第一級鍵。
代碼:(演示)
$result = [];
foreach ($data as $row) {
$compositeKey = $row['tahun'] . '_' . $row['bulan'];
if (!isset($result[$compositeKey]) || $row['pembetulan'] > $result[$compositeKey]['pembetulan']) {
$result[$compositeKey] = $row;
}
}
var_export(
array_values($result)
);
輸出:
array (
0 =>
array (
'tahun' => 2001,
'bulan' => 1,
'pembetulan' => 0,
),
1 =>
array (
'tahun' => 2002,
'bulan' => 1,
'pembetulan' => 1,
),
2 =>
array (
'tahun' => 2003,
'bulan' => 1,
'pembetulan' => 4,
),
3 =>
array (
'tahun' => 2003,
'bulan' => 2,
'pembetulan' => 0,
),
)
自 PHP 5.5 起,您可以執行以下操作:
echo max(array_column($data, 'tahun'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.