2014-02-12 59 views
2

的問題是:POST陣列

我已經此數組通過POST字段來

{"name":"sample","email":"[email protected]","comments":"test"} 

我想來拆分,並通過陣列運行它,所以最後的結果將

name sample 
email [email protected] 
comments test 

我曾嘗試是這樣的:

$a = $_POST['rawRequest']; 
$a = json_encode($a); 
foreach ($a as $k => $v) { 
    echo "\$a[$k] => $v <br />"; 
} 

但它不會做任何事情,但是當我用這個變量測試(在使用POST)

$a = array("name" => 1,"email" => 2,"sample" => 3); 

它按預期工作。

試圖瞭解發生了什麼事

這顯然是因爲什麼,我這裏處理是兩種不同類型的數組。然而,無盡的google'ing後,我找不到任何解釋差異(基本上下面的數組)的區別。所以+1到explination這讓我比較的新手心中明白髮生了什麼,爲什麼如果你想解碼JSON字符串數組,而不是一個對象,這是錯誤的

{"name"=>"sample","email"=>"[email protected]"=>"comments":"test"} 

{"name":"sample","email":"[email protected]","comments":"test"} 
+0

等一下。什麼是從$ _POST ['rawRequest']'得到的_raw_輸入?你正在調用'json_encode()',這在這裏沒有意義。你從'$ _POST'開始的價值是什麼? –

+0

這是該帖子字段的值:{「name」:「sample」,「email」:「[email protected]」,「comments」:「test」} –

+0

啊,那麼你需要'json_decode ()'而不是'json_encode()'。 –

回答

1

使用「數組」標誌。

$array = json_decode($json_string, true); 
1

嘗試爲

$data = '{"name":"sample","email":"[email protected]","comments":"test"}'; 
$json = json_decode($data,true); 
foreach($json as $key=>$val){ 
echo $key." - ".$val; 
    echo "<br />"; 
} 

檢查這裏的輸出

http://phpfiddle.org/main/code/ytn-kp0

你已經做到了

echo "\$a[$k] => $v <br />"; 

這將輸出

$a[name] => sample 

「美元」將被視爲字符串

你可以做你正在做的方式,但你需要改變回聲的東西作爲

echo $k ."=>" .$v. "<br />"; 

因爲你是循環數組使用foreach和$ k將包含數組的鍵,$ v將是值!

+1

你應該解釋爲什麼這將工作,而不是說「試試這個」 –

+3

謝謝,我會給這個去吧。不過,我會很感激@RUJordan說的解釋。我想知道實際發生的情況,而不是無休止地複製和粘貼:) –

+0

@ tim.baker我喜歡你。 – SomeKittens

2

$ AA是不是一個陣列,是一個JSON:

$a = $_POST['rawRequest']; 
$aa = json_encode($a); 

因此,你不能在$ AA使用的foreach。

0

我有Json解碼編碼數組,並通過下面的foreach循環它,並解釋每個部分的作用。


/* The Json encoded array.*/ 
$json = '{"name":"sample","email":"[email protected]","comments":"test"}'; 

/* Decode the Json (back to a PHP array) */ 
$decode = json_decode($json, true); 

/* Loop through the keys and values of the array */ 
foreach ($decode as $k => $v) { 
    $new_string .= $k . ' | ' . $v . '<br/>'; 
} 

/* Show the result on the page */ 
echo $new_string; 

上述代碼返回以下;

name | sample 
email | [email protected] 
comments | test 

如果您要訪問的數組值一個接一個,你也可以使用下面的代碼。

/* The Json encoded array.*/ 
$json = '{"name":"sample","email":"[email protected]","comments":"test"}'; 

/* Decode the Json (back to a PHP array) */ 
$decode = json_decode($json, true); 

echo $decode['name'];//returns sample 
echo $decode['email'];//returns [email protected] 
echo $decode['comments'];//returns test