PHP:针对特定的JSON数组并正确附加POST数据?

时间:2015-02-27 20:45:53

标签: php ajax json

我有一个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端为前端分配任何内容。

4 个答案:

答案 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)

{p <1}}需要

PHP&gt; = 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()

保存