我有一个JSON文件,实质上是这样的结构:
[{
"name": "James",
"reviews": [
{
"stars": 5,
"body": "great!"
},
{
"stars": 1,
"body": "bad!"
}
]
},
{
"name": "David",
"reviews": [
{
"stars": 4,
"body": "pretty good!"
},
{
"stars": 2,
"body": "just ok..."
}
]
}]
现在,当David为PHP脚本提供新的审核数据时,如何定位David的特定“评论”并附加它?
我已经正确解码了所有内容并且可以访问已解码的文件和发布信息。我只是不知道如何在JSON数组中定位David的具体评论...提前谢谢!
更新 - 为了清楚起见,所有内容都已解码,POST数据和来自服务器的JSON文件。我只需要知道如何专门针对David的评论并附加它。
更新2 - 每个人,也请理解这是在索引未知的情况下。做[1]会很棒,但是当有人提交时,他们就不会知道它是什么索引。渲染的循环是在AngularJS btw中完成的,因此无法在PHP端为前端分配任何内容。
答案 0 :(得分:2)
你必须使用for-loop / foreach迭代数组测试,其中arr ['name'] ==='David', 然后你可以访问arr ['reviews']。
foreach ($array as $person)
{
if ($person['name'] === 'David')
{
$person['reviews'][] = array("stars"=> 3,"body"=> "pretty cool!");
break;
}
}
编辑: 您也可以为此
创建一个通用函数function findElem(arr,field,e)
{
foreach ($arr as $elem)
{
if ($elem[field] === e)
{
return $elem;
}
}
return null;
}
致电:
$elem = findElem(myArray,'name','David');
if ($elem !== null)
$elem[] = array("stars"=> 3,"body"=> "pretty cool!");
看起来更多的工作,但如果你要重复这样做,那么这会有所帮助。
答案 1 :(得分:1)
PHP> = 5.5.0,或者参见下面的备用:
array_column
您可以使用以下$array[array_search('David', array_column($array, 'name'))]['reviews'][] = array(
'stars'=>1,'body'=>'meh'
);
代替:
array_column
答案 2 :(得分:1)
如果您想要专门大卫的评论,仅大卫的评论...假设$ array包含json_decoded数组:
$david_reviews = $array[1]["reviews"];
foreach($david_reviews as $review){
//Do code to retrieve indexes of array
$stars = $review["stars"] //5
$body = $review["body"] //Great!
}
如果您希望获取每个结果的评论,那么用户2225171的答案就是您正在寻找的答案。
答案 3 :(得分:0)
json_decode($json, true)
会返回简单的数据数组。然后保存您需要的内容并使用json_encode()