2011-10-20 52 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你是對的,但他沒有說明是否是。因此,我們必須假設它不是。 –