POST数组通过JSON foreach

时间:2014-02-12 19:30:57

标签: php arrays foreach

问题:

我让这个数组通过POST字段

{"name":"sample","email":"a@sample.co.uk","comments":"test"}

我想将它拆开并通过数组运行,因此最终结果将是

name sample
email a@sample.co.uk
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);

它按预期工作。

试图了解正在发生的事情

很明显,因为我在这里处理的是两种不同类型的数组。然而,在无休止的谷歌之后,我无法找到解释差异的任何地方(基本上下面的数组)。因此,我的相对新手的头脑能够理解发生了什么以及为什么它是错误的

{"name"=>"sample","email"=>"a@sample.co.uk"=>"comments":"test"}

{"name":"sample","email":"a@sample.co.uk","comments":"test"}

4 个答案:

答案 0 :(得分:2)

$ aa不是数组,是JSON:

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

因此,你不能在$ aa中使用foreach。

答案 1 :(得分:1)

如果要将json字符串解码为数组而不是对象,请使用“Array”标志。

$array = json_decode($json_string, true);

答案 2 :(得分:1)

尝试

$data = '{"name":"sample","email":"a@sample.co.uk","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 

“$ a”将被视为字符串

您可以按照自己的方式进行,但需要将回声更改为

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

由于您使用foreach循环数组,$ k将包含数组的键,$ v将是值!!

答案 3 :(得分:0)

我让Json对编码数组进行解码,并通过下面的foreach将其循环,并附有评论,解释每个部分的作用。


/* The Json encoded array.*/
$json = '{"name":"sample","email":"a@sample.co.uk","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 | a@sample.co.uk
comments | test

如果要逐个访问数组值,还可以使用以下代码。

/* The Json encoded array.*/
$json = '{"name":"sample","email":"a@sample.co.uk","comments":"test"}';

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

echo $decode['name'];//returns sample
echo $decode['email'];//returns a@sample.co.uk
echo $decode['comments'];//returns test