<?php
$arr=array();
//例子1
$json_str= '{"ret":"OK","questions":{
"1":{"qid":"1","title":"\u95ee\u98981111",
"answers":{
"1":{"cid":"1","title":"A","cont":"\u7b54\u68481-1","iscorrect":"1","qid":"1"},
"2":{"cid":"2","title":"B","cont":"\u7b54\u68481-2","iscorrect":"0","qid":"1"},
"3":{"cid":"3","title":"C","cont":"\u7b54\u68481-3","iscorrect":"0","qid":"1"}
}},
"2":{"qid":"2","title":"\u95ee\u98982222",
"answers":{"5":{
"cid":"5","title":"A","cont":"\u7b54\u68482-1","iscorrect":"0","qid":"2"},
"6":{"cid":"6","title":"B","cont":"\u7b54\u68482-2","iscorrect":"0","qid":"2"},
"7":{"cid":"7","title":"A","cont":"aa","iscorrect":"0","qid":"2"},
"8":{"cid":"8","title":"D","cont":"\u7b54\u68482-4","iscorrect":"0","qid":"2"}}}}}';
// 相关错误反馈
// Notice: Undefined offset: 1
// Notice: Trying to get property of non-object
// Notice: Undefined offset: 0
// Notice: Array to string conversion //json_decode不加参数true,转成的就不是array,而是对象 [questions] => stdClass Object
$arr=json_decode($json_str,true);
// echo "<pre>";print_r($arr);exit; //json_decode不加参数true,下面取值出错: Fatal error: Cannot use object of type stdClass as array in
//通过key:ret取值
echo $arr["ret"];echo "<br/>";
$arr_q=$arr["questions"];
//通过key取值
echo " 1-title:";echo $arr["questions"]["1"]["answers"]["1"]["title"];
echo " 8-title:";echo $arr["questions"]["2"]["answers"]["8"]["title"];
$arr_q1a=$arr["questions"]["1"]["answers"];
$arr_q2a=$arr["questions"]["2"]["answers"];
echo "<br>";echo" q1a:"; var_dump($arr_q1a); $m=count($arr_q1a);echo "m:$m ";
$n=count($arr_q2a);echo "n:$n "; //这个打印就有值 t1:1 t1:2 t1:3
for($i=1;$i<=$m;$i++){
echo " t1:";echo $arr_q1a[$i]['cid'];
}
//这种for会漏值 T2: T2: T2: T2: 按说应该是 5 6 7 8
for($i=1;$i<=$n;$i++){
echo " T2:";echo $arr_q2a[$i]['cid'];
}
//for循环key和value转换就很不方便
foreach ($arr_q2a as $key => $value){
echo "questions 2 : ".$key."->".$value." ";
}
//多维数组,最好用foreach方便
foreach ($arr_q as $key1=>$value1){
echo "<br>"; echo $key1;
foreach ($value1['answers'] as $key2=>$value2){
echo "<br>"; echo $key2."->".$value2;
foreach ($value2 as $key3=>$value3){
echo $key3."->".$value3." ";
}
}
} //例子2
$json= '[{"id":"1","name":"\u5f20\u96ea\u6885","age":"27","subject":"\u8ba1\u7b97\u673a\u79d1\u5b66\u4e0e\u6280\u672f"},{"id":"2","name":"\u5f20\u6c9b\u9716","age":"21","subject":"\u8f6f\u4ef6\u5de5\u7a0b"}]'; // $students= json_decode($json,true);//得到的是 array
//echo "<pre>";print_r($students);
// for($i=0;$i<count($students);$i++){
// echo "姓名:".$students[$i]['name']."&nbsp;&nbsp;&nbsp;年 龄:".$students[$i]['age']."&nbsp;&nbsp;&nbsp;专 业:".$students[$i]['subject']."<br />";
// }
$students= json_decode($json);//得到的是 object
foreach($students as $obj){
echo "姓名:".$obj->name."年龄:".$obj->age."专业:".$obj->subject."<br/>";
}
?>

总结,php中的多维数组,最好用foreach。

php中json_decode及foreach使用总结的更多相关文章

  1. php中json_decode()和json_encode()的使用方法

    php中json_decode()和json_encode()的使用方法 作者: 字体:[增加 减小] 类型:转载   json_decode对JSON格式的字符串进行编码而json_encode对变 ...

  2. 聊一聊C# 8.0中的await foreach

    AsyncStreamsInCShaper8.0 很开心今天能与大家一起聊聊C# 8.0中的新特性-Async Streams,一般人通常看到这个词表情是这样. 简单说,其实就是C# 8.0中支持aw ...

  3. 深度理解PHP中for与foreach两个循环结构遍历数组的区别

    遍历一个数组是编程中最常见不过的了,这里讨论下for和foreach两种方法: 首先,我们先准备两个用于遍历的数组: $arr1=array(1=>'a', 3=>22, 5=>'b ...

  4. 0503 php中for与foreach的区别

    结论: foreach:只能用于数组和对象,如果是非索引数组,只可以用foreach. for:如果是索引数组,可以用for遍历. foreach循环结构是按照数组内部的指针去循环的,当 foreac ...

  5. 浅析PHP中for与foreach两个循环结构遍历数组的区别

    遍历一个数组是编程中最常见不过的了,这里跟大家讨论下for和foreach两种方法.用这两种方法执行遍历的场景太多太多了,这里我们只针对以下两个数组作为例子来讨论.所谓管中窥豹,多少能理清一点两者的区 ...

  6. php中json_decode返回数组或对象

    http://www.3lian.com/edu/2014/02-11/128395.html 1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL ...

  7. js数组中indexOf/filter/forEach/map/reduce详解

    今天在网上看到一篇帖子,如题: 出处:前端开发博客 (http://caibaojian.com/5-array-methods.html) 在ES5中一共有9个Array方法,分别是: Array. ...

  8. JS数组中every(),filter(),forEach(),map(),some()方法学习笔记!

    ES5中定义了五种数组的迭代方法:every(),filter(),forEach(),map(),some(). 每个方法都接受两个参数:要在每一项运行的函数(必选)和运行该函数的作用域的对象-影响 ...

  9. 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR

    该字符中含了ASCII码ETB控制符,即\x17导致json解析失败 (截图中显示ETB是因为用了Sublime text2) 解决方法如下:去掉0-31的控制符再进行decode $result = ...

随机推荐

  1. Android Fragment 详解(未完...)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. 之前写过一篇关于 Fragment 生命周期的文章 ...

  2. Java svnkit check update commit

    import java.io.File; import org.apache.log4j.Logger;import org.tmatesoft.svn.core.SVNCommitInfo;impo ...

  3. 在Springboot2.0项目中使用Druid配置多数据源

    在Springboot出现之前配置数据源以及相关的事物,缓存等内容一直是个繁琐的工作,但是Springboot出现后这些基本都可以靠默认配置搞定,就变得很轻松了.这就是现在推崇模板>配置的原因, ...

  4. wordpress模板修改及函数说明

    原文:http://java-er.com/blog/wp-mb-edit/ WordPress基本模板文件 style.css : CSS(样式表)文件index.php : 主页模板archive ...

  5. 几款流行的HTML5 UI 框架比较

    手机HTML5开发,大部分都使用现有的框架,这里简单比较几个流行的UI 框架.作者(启明星工作室 http://www.dotnetcms.org) 比较一下几款流行的HTML5框架,个人意见,仅供参 ...

  6. Java多线程学习(吐血超详细总结)(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但 ...

  7. 解决Gerrit的git unpack error问题

    今天上午同事和我说neutron项目要换成全新的内部代码,原先仓库里的代码要全部废弃掉.于是我就简单地创建了一个空项目使用git push --force将其置空. 下午的时候,麻烦事情就来了,同事发 ...

  8. Spark机器学习(4):朴素贝叶斯算法

    1. 贝叶斯定理 条件概率公式: 这个公式非常简单,就是计算在B发生的情况下,A发生的概率.但是很多时候,我们很容易知道P(A|B),需要计算的是P(B|A),这时就要用到贝叶斯定理: 2. 朴素贝叶 ...

  9. MySQL在默认事务下各SQL语句使用的锁分析

    数据库使用锁是为了支持更好的并发,提供数据的完整性和一致性.InnoDB是一个支持行锁的存储引擎,锁的类型有:共享锁(S).排他锁(X).意向共享(IS).意向排他(IX).为了提供更好的并发,Inn ...

  10. (原)IOU的计算

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/9043395.html 参考网址: https://github.com/deepinsight/ins ...