我想从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号
答案 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