php拆解json, 网上的样例都比较死板, 做了一个灵活一点的. 但是, 仔细想想这个是递归, 不是迭代, 函数会频繁的压栈, 出栈, 对性能的影响不好. 怎么迭代呢? 有空再读读scip

$xxxx=json_decode($xxx, TRUE); //解析一个json为数组.

showarray($xxxx);	// 函数调用.
function showarray($x){//函数定义
  foreach($x as $k=>$v){
    if($k!=='picture_url'){//判断这个项是否我要的.
      //其实这个判断相当丑陋, 我们知道php数组是hash, 所以直接xxx['ooo']更有效率, 不过那种情况如何操作数组的指针继续到下一个项目呢.
          showarray($v); //这里迭代了.


      //	这里故意这么写的, 一般情况可以更清晰, 但是, 这个项目要迭代, 因此没啥用, 不过如果改成递归就有用了吧?
    }else{//这里把符合要求的项目打印出来.			
      echo "<img src=".$v.">";
    }
  }		
}
while (list($k, $v)=each($x)){
		if($v['picture_url']){// 这就不白痴了. 但是, 这个if判断依旧很丑陋. 怎么去掉呢? 而且有bug, 需要用下面的isset函数或者empty函数解决.
			echo "<img src=".$v['picture_url'].">";
			continue;
		}
	 	if(is_array($v))showarray($v);
}

既然我们觉得if判断比较丑陋, 那么怎么判断数组中键值是否存在呢?

key_exists // 这个就可以当做array_key_exists用.
if (array_key_exists("Volvo",$a))//判断键值是否存在. 效率比下面两个好很多.
in_array(value,array,type) //判断值是否存在, type是bool指明是否需要类型相同.
array_search(value,array,strict) //等于上面一个.
empty($a['a']) //比array_key_exists还要快很多. 
isset($a['a']) 

empty:

  1. 参数为0
  2. 或为NULL时(如上面列子),empty均返回TRUE
  3. 参数为[]也是true.
  4. 因此, empty和我们的期望是一致的.

isset:

  1. 参数为NULL时,返回FALSE,0与NULL在PHP中是有区别的,
  2. isset(0)返回TRUE,
  3. 空数组[], isset([])判断也是true,
  4. 因此, 不要用isset

array_key_exists: 纯粹的判断数组键值对是否存在,无论值是多少