PHP如何快速取出JSON的指定键值?
比如{'a':'1','b':'2','c':'3'},{'a':'4','b':'5','c':'6'},{'a':'7','b':'8','c':'9'}取出条件a=...
比如{'a':'1','b':'2','c':'3'},{'a':'4','b':'5','c':'6'},{'a':'7','b':'8','c':'9'}
取出条件a=1的c值,我只想到用for循环判断a=1时再取出c,有没有更方便快捷的办法呢? 展开
取出条件a=1的c值,我只想到用for循环判断a=1时再取出c,有没有更方便快捷的办法呢? 展开
3个回答
展开全部
<?php
$json_str = '[{"a":1,"b":2,"c":3},{"a":4,"b":5,"c":6},{"a":7,"b":8,"c":9}]';
$arr = json_decode($json_str , true);
/**
** $json_str json字符串
** $limit 限制条件数组 如:$limit=array('a','==1');
** $key 返回的键值
**/
function getValueByKey($json_str,$limit=array(),$key){
$arr=json_decode($json_str,true);
foreach($arr as $v){
if($v[$limit[0]].$limit[1]){
return $v[$key];
}
}
}
$data=getValueByKey($json_str,array('a','==1'),'c');
?>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种方法可以做到,但是不知道速度上会不会更快,没有测试速度,但是不需要循环了
缺点是只能取出一个a=1时的c的值,如果数组里有多个a=1的话,只能取到第一个,另一个缺点是数据格式必须是你给出这种格式的:{'a':'1','b':'2','c':'3'}, 也就是key a和key c之间必须要还有一个key 才行。不过如果数组里的数据很多的话,感觉这种应该会比循环快。如果数据少的话还是循环更稳一点,不会有太多问题
$str = "{'a':'1','b':'2','c':'3'},{'a':'4','b':'5','c':'6'},{'a':'7','b':'8','c':'9'}";
$temp = explode("'a':'1',",$str);
if(count($temp)>1){
$temp2 = explode(",",$temp[1]);
$temp3 = explode(":'", $temp2[1]);
$result = explode("'",$temp3[1]);
echo $result[0];
}else{
echo "不存在a=1";
}
缺点是只能取出一个a=1时的c的值,如果数组里有多个a=1的话,只能取到第一个,另一个缺点是数据格式必须是你给出这种格式的:{'a':'1','b':'2','c':'3'}, 也就是key a和key c之间必须要还有一个key 才行。不过如果数组里的数据很多的话,感觉这种应该会比循环快。如果数据少的话还是循环更稳一点,不会有太多问题
$str = "{'a':'1','b':'2','c':'3'},{'a':'4','b':'5','c':'6'},{'a':'7','b':'8','c':'9'}";
$temp = explode("'a':'1',",$str);
if(count($temp)>1){
$temp2 = explode(",",$temp[1]);
$temp3 = explode(":'", $temp2[1]);
$result = explode("'",$temp3[1]);
echo $result[0];
}else{
echo "不存在a=1";
}
追问
感谢你的回答,不过成员个数不定而且a,c之间不一定有b,好像还是for稳定兼容好些
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询