JSON-仅显示php中的某些数据

时间:2018-11-07 08:03:31

标签: php json

这是我作为数组的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,
    )
)

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

这是我的代码,它以字符串形式显示“ 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>";    
        }
    }

这不是我预期的结果。

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是将$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