首页 > 解决方案 > JSON - 仅在 php 中显示某些数据

问题描述

这是我作为数组的 json 数据,它在文件data.json中,我尝试使用 php 解析数据,但我无法使用 for 循环显示结果。

array (
  'data' => 
  array (
    0 => 
    array (
      'a' => 3222,
      'b' => 3,
    ),
    1 => 
    array (
      'a' => 3221,
      'b' => 3,
    ),
    2 => 
    array (
      'a' => 2215,
      'b' => 2,
    ),
    3 => 
    array (
      'a' => 2214,
      'b' => 2,
    ),
    4 => 
    array (
      'a' => 3218,
      'b' => 2,
    ),
    5 => 
    array (
      'a' => 3217,
      'b' => 3,
    ),
    6 => 
    array (
      'a' => 3216,
      'b' => 3,
    ),
    7 => 
    array (
      'a' => 1235,
      'b' => 1,
    ),
    8 => 
    array (
      'a' => 1234,
      'b' => 1,
    ),
    9 => 
    array (
      'a' => 1233,
      'b' => 1,
    ),
    10 => 
    array (
      'a' => 3213,
      'b' => 3,
    )
)

我只想显示数据,即“b=3”,其中包含“a”的最大值。

这是我的代码,它将“a”的所有结果显示为字符串。所有数据都显示为列表。

<?php

    $json = file_get_contents('data.json');

    $data = json_decode($json,true);

    $q = $data['data'];

    $length = count($q);

    for ($i = 0; $i<$length ; $i++){
        if ($q[$i]['b']==3){
            $pc = $q[$i]['a'];
            echo $pc;
            echo "<br>";    
        }
    }

这不是我预期的结果。

标签: phpjson

解决方案


解决这个问题的一种方法是检查当前值$pc与最新值;如果更高,则覆盖它:

$q = $data['data'];

$length = count($q);
$max = 0;
for ($i = 0; $i<$length ; $i++){
    if ($q[$i]['b']==3){
        $pc = $q[$i]['a'];
        if ($pc > $max) {
            $max = $pc;
        }
    }
}
echo $max; //3222

另一种选择可能是使用array_mapmax

$result = max(array_map(function($x){
    if($x['b'] === 3) return $x['a'];
    }, $q
));

echo $result; //3222 

推荐阅读