如何从json php获取数字键值

时间:2018-06-05 10:47:16

标签: php json

我想从json数据中获取key_value但不使用循环

        $y = "2018";

        $json = '[
                  {"2017":[{"p":"50","v":"55"}]},
                  {"2018":[{"p":"50","v":"55"}]}
                ]';
        $obj = json_decode($json, true);
        if(array_key_exists($y, $obj)){
            return $json[$y]; 
        } else {
            return array_search($y, $obj);
        }

仅返回1号

4 个答案:

答案 0 :(得分:1)

我想这是你的预期答案

$y = "2018";
$json = '[
          {"2017":[{"p":"50","v":"55"}]},
          {"2018":[{"p":"50","v":"55"}]}
        ]';
$obj = json_decode($json, true);
return array_column($obj,$y);

这将返回如下数组:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [p] => 50
                    [v] => 55
                )

        )

)

答案 1 :(得分:0)

由于你的json字符串在解码时如下:

Array
(
    [0] => Array
        (
            [2017] => Array
                (
                    [0] => Array
                        (
                            [p] => 50
                            [v] => 55
                        )    
                )
        )

    [1] => Array
        (
            [2018] => Array
                (
                    [0] => Array
                        (
                            [p] => 50
                            [v] => 55
                        )
                )
        )
)

array_key_exists查看给定数组中是否存在给定键。 array_search查看给定值是否出现在给定数组中。

这些函数无法查看多维数组。您应该遍历数组,然后执行array_key_exists和/或array_search函数。

答案 2 :(得分:0)

好吧所以我试图在不使用循环的情况下完成它,这可能是你想要的或者不是。

$y = "2018";

$json = '[
          {"2017":[{"p":"50","v":"55"}]},
          {"2018":[{"p":"50","v":"55"}]}
        ]';
$obj = json_decode($json, true);

function exists( $key, $value, $y )
{
  global $result;
  if( isset( $key[ $y ] ) )
  {
    $result = $key[ $y ];
  }
}
array_walk( $obj, "exists", $y );
var_dump( $result );

结果:

array(1) {
  [0]=>
  array(2) {
    ["p"]=>
    string(2) "50"
    ["v"]=>
    string(2) "55"
 }
}

答案 3 :(得分:0)

    $num = array_walk($json, function($a) use ($i) {
        $y = "2018";
        if(isset($a[$y])){
            return $i;
        }
        $i++;
    });

返回1