簡體   English   中英

PHP-從json文件獲取最高價值

[英]PHP - Get highest value from json file

我想從以下json文件中獲取最高值(y)。

   [{
     "name": "Time",
     "data": ["20:40", "20:45", "20:50"]
     },
     {
     "name": "Values",
     "data": [{
               "y": 5774,
               "v1": "Test1",
               "v2": "20:40"
              },
              {
               "y": 5555,
               "v1": "Test2",
               "v2": "20:45"
              },
              {
               "y": 5235,
               "v1": "Test3",
               "v2": "20:50"
              }]
            }]

用max()嘗試過

$json_data = file_get_contents('file.json');
$json = json_decode($json_data, true);
$max_value = max($json["data"]);

echo $max["y"];

但我沒有任何結果...

以下將檢索最大的y值:

<?php
    $json_data = file_get_contents('a.json');
    $json = json_decode($json_data, true);
    $max_value = max($json[1]["data"]);

    echo $max_value['y'];
?>

並且以下將檢索具有最大y值的數組:

<?php
$json_data = file_get_contents('a.json');
$json = json_decode($json_data, true);
$max_value = max($json[1]["data"]);

print_r($max_value);
?>

腳本的問題是,您試圖訪問第3行上不存在的數組,並且沒有正確回顯$ max_value數組。

警告

上面的代碼僅起作用,因為OP的JSON轉換為數組時具有他要按其順序對數組進行排序的元素作為第一個索引值。

因此,就像下面注釋中所述的@MatsLindh一樣,如果您有一個鍵值為'x'而不是'y'的值,則無論它位於JSON中的什么位置,只要它仍然是最低的鍵值,便將其作為第一個索引值從JSON轉換為數組時在數組中使用。

只要要排序的元素具有最低的鍵值,就可以在提供的JSON中提供混合匹配的值,將其作為數組中索引的第一個元素。 例如:

   [{
     "name": "Time",
     "data": ["20:40", "20:45", "20:50"]
     },
     {
     "name": "Values",
     "data": [{
               "y": 5774,
               "v1": "Test1",
               "v2": "20:40",
               "Z" : 8000
              },
              {
               "y": 5555,
               "v1": "Test2",
               "v2": "20:45",
               "Abc": 6754
              },
              {
               "y": 5235,
               "v1": "Test3",
               "v2": "20:50",
               "v3": 6594
              }]
            }]

但是,如果上述JSON是通過我的第一個函數傳遞的,則它將返回OP尋找的所需結果。

   [{
     "name": "Time",
     "data": ["20:40", "20:45", "20:50"]
     },
     {
     "name": "Values",
     "data": [{
               "y": 5774,
               "v1": "Test1",
               "v2": "20:40",
                "a": 897
              },
              {
               "y": 5555,
               "v1": "Test2",
               "v2": "20:45"
              },
              {
               "y": 5235,
               "v1": "Test3",
               "v2": "20:50"
              }]
            }]

使用這組JSON,鍵“ a”的元素將計數順序弄亂了,因為它被放置在數組的開頭。

結論

如果您知道從JSON生成的數組的第一個值將始終是您要計算的值,那么我的代碼就可以了。 否則,最好使用@MatsLindh的解決方案。

由於您實際上是在嘗試獲取數組中某一列的max($json[1]['data'])僅執行max($json[1]['data'])本身沒有意義,因為該數組中的每個元素都是關聯數組本身),則必須選擇要查找first最大值的值:

$max_value = max(array_column($json[1]["data"], "y"));

這將從$json["data"]數組中每個元素的y列中提取每個值,並返回存在的max (通過max )。

在PHP 5.5中添加了array_column ,但是如果您使用的是舊版本,則可以通過一個小的輔助函數來模擬它:

function array_column($array, $column) {
    $ret = array();
    foreach ($array as $elem) {
        $ret[] = $elem[$column];
    }
    return $ret;
}

問題在於您的json_decoded數據並非全部以數組形式出現,而是還包括STD對象,因此在您的情況下查找最大值的另一種方法是使用以下算法。

$json_data = file_get_contents('file.json');
$json = json_decode($json_data, true);
$max_value = null;
foreach($json[1]->data as $dt){
    if($dt->y > $max_value)
        $max_value = $dt->y;
}
echo $max_value; // There it will output the highest value!

您可以通過var_dump函數以php格式查看此數組

$json_data = file_get_contents('file.json');
$json = json_decode($json_data, true);
$max_value = max($json["data"]);
var_dump($max_value);

並且您不需要使用max,因為您需要檢查數組中的最后一個元素是否存在鍵name = values通過foreacharray_map獲取值的值以分析您存在的數組中的鍵name = values實例name = values

$json_data = file_get_contents('file.json');
$json = json_decode($json_data, true);
foreach($json as $_js) {
   if($_js['name'] != 'Values') {
      continue;
   }
   foreach($_js['data'] as $__js) {
       echo $__js['y']; // or push to temporary variable
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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