簡體   English   中英

如何從 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]
];

我如何獲得每個tahunbulan的最高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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM