2011-10-20 46 views
0

测试在一些JSON代码,例如[{"a":"1"},{"a":"2"},{"a":"3"},{"b":"2"}],我想用JSON解码,获取数据并作出判断,如果第一a点头==b点头最前一页a点头!=b点头。一些代码在这里。PHP json_decode

<?php 
header("Content-type: text/html; charset=utf-8"); 
$json = json_decode('[{"a":"1"},{"a":"2"},{"a":"3"},{"b":"2"}]',true); 
$number=1; 
foreach($json as $num){ 
if($num['a']!=$num['b']){ 
    if($num['a']){ 
     echo 'a'.$number.''.$num['a'].'<br />'; 
    } 
}else{ 
    if($num['a']){ 
     echo 'b'.$number.''.$num['a'].'<br />'; 
    } 
} 
$number++; 
} 
?> 

现在我的结果是:

a11 
a22 
a33 

我需要得到的结果:

a11 
b22 
a33 
+0

你想做的事是什么呢?如果第一个**节点**是== b节点或者是一个节点是!= b节点,那么什么? – netcoder

+0

@netcoder,我想做一个foreach所有'$ num ['a']'并确定哪个'$ num ['a']'等于'$ num ['b']'如'a11, b22,a33' – cj333

+0

“测试一些json代码”,甜心人。 – Xeoncross

回答

2

你怎么能比较不存在的数组字段?

没有$ NUM [ 'B']字段中,有这些领域中,它的阵列[4] (index 0..3)

  • 一个:1
  • 一个:2
  • 一个:3
  • b:2-

$num在第一次迭代将持有

array("a"=>1); 

所以,如果你想比较"b":2你必须使用这种模式:

$cmpr = array_shift($json); 
... 
if($num != $cmpr) 

Array_shift:http://php.net/manual/en/function.array-shift.php

+0

不完全知道'array_pop',去参考'php.net' – cj333

+0

array_pop($ json)会输出一个数组。它需要是array_shift(array_pop($ json))来实际工作。 **也**,这将*只有*工作,如果你有最终值设置B. –

+0

是的,你说得对。我修复了我的答案。并且是的,这个代码只对**给定的数据结构 –

2

你试图参阅B变量时,当前没有定义湾您必须先循环并找到b变量。 http://codepad.org/0SnrPp6N

<?php 
$json = json_decode('[{"a":"1"},{"a":"2"},{"a":"3"},{"b":"2"}]',true); 
foreach ($json as $var) { 
    if (isset($var['b'])) { $b = $var['b']; break; } 
} 
$i=0; 
foreach ($json as $var) { 
    if (!isset($var['a'])) 
     continue; 
    if ($var['a']!=$b) 
     echo "a".++$i."$var[a]\n"; 
    else 
     echo "b".++$i."$var[a]\n"; 
} 
+0

有效**如果B的位置总是已知的(数组的最后一个元素) –

+0

是的,这个问题看起来很简单,但有点复杂... – cj333

+0

@MarekSebera你是对的,但他没有说明是否是。因此,我们必须假设它不是。 –