Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解码JSON响应不同元素之间的交叉引用_Php_Json - Fatal编程技术网

Php 解码JSON响应不同元素之间的交叉引用

Php 解码JSON响应不同元素之间的交叉引用,php,json,Php,Json,我正在解码一个JSON响应并将其输出到一个表中。JSON响应分为三个元素(事件、组织者和场馆)和事件节点引用来自场馆和组织者元素的节点 下面是一个JSON响应的print\r显示示例: Array ( [Events] => Array ( [0] => Array ( [EventTitle] => Concert One

我正在解码一个JSON响应并将其输出到一个表中。JSON响应分为三个元素(
事件
组织者
场馆
)和
事件
节点引用来自
场馆
组织者
元素的节点

下面是一个JSON响应的
print\r
显示示例:

Array
(
    [Events] => Array
        (
            [0] => Array
                (
                    [EventTitle] => Concert One                 
                    [Details] => Array
                        (
                            [VenueID] => 100
                            [EventDate] => 2016-01-01
                        )
                )

            [1] => Array
                (
                    [EventTitle] => Concert Two
                    [Details] => Array
                        (
                            [VenueID] => 150
                            [EventDate] => 2016-01-02
                        )
                )

          )

    [Venues] => Array
        (
            [0] => Array
                (
                    [HallID] => 100
                    [VenueName] => Venue A
                )

            [1] => Array
                (
                    [HallID] => 150
                    [VenueName] => Venue B
                )

        )

)
实际的JSON示例如下所示:

{
    "Events": [
        {
            "EventTitle": "Concert One",
            "Details": {
                "VenueID": 100,
                "EventDate": "2016-01-01"
            }
        },
        {
            "EventTitle": "Concert Two",
            "Details": {
                "VenueID": 150,
                "EventDate": "2016-01-02"
            }
        }
    ],
    "Venues": [
        {
            "HallID": 100,
            "VenueName": "Venue A"
        },
        {
            "HallID": 150,
            "VenueName": "Venue B"
        }
    ]
}
下面是我用来创建表的foreach循环:

<?php

foreach($results['Events'] as $values)

{
        echo '<tr><td>' . $values['EventTitle'] . '</td>';
        echo '<td>' . $values['Details']['VenueID'] . '</td>';
        echo '<td>' . $values['Details']['EventDate'] . '</td></tr>';
}

?>
我正在努力解决的是如何将
场馆ID
(100150)替换为
VenueName
(场馆A、场馆B),这样的结果是:

Event title | Event venue | Event date
Concert One | Venue  A | 2016-01-01
Concert Two | Venue  B | 2016-01-02

有可能做到这一点吗?

我要做的是将您的
组织者
场馆
解析到它们自己的数组中,ID作为键。因此,您将有这样一个数组(其中
$arr
表示保存完整数组的变量)

您可以使用
foreach
循环来构建它。然后,您将迭代您的
事件
,使用键获取正确的关系数据(执行与
$vention
相同的操作来构建
$organizers

foreach($results['Events']作为$value){
回显'.$values['EventTitle'].';
回显“”。$VICENT[$values['Details']['VenueID'].';
回显“”。$organizer[$values['Details']['OrganizerID'].';
回显'.$values['Details']['EventDate'].';
}
试试这个:
foreach($results['Events'] as $values)

{
        echo '<tr><td>' . $values['EventTitle'] . '</td>';
        echo '<td>' . $results['Venues'][array_search($values['Details']['VenueID'], array_column($results['Venues'], 'HallID'))]['VenueName'] . '</td>';
        echo '<td>' . $values['Details']['EventDate'] . '</td></tr>';
}

?>
foreach($results['Events']作为$value)
{
回显'.$values['EventTitle'].';
回显'.$results['viouses'][array_search($values['Details']['VenueID'],array_column($results['viouses'],'HallID'))]['VenueName'.';
回显'.$values['Details']['EventDate'].';
}
?>

一切都在一条线上

听起来很有趣,但我对第一部分感到困惑。组织者和场馆不是已经有阵列了吗?是的,但它们的结构方式对您没有直接的帮助。假设这是在一个单独的变量中,您将拥有
$ar['Values'][0]['VenueID']
,然后您必须迭代每个元素(非常耗时)。通过构建一个不同的阵列,
$venture[100]='venture a'您现在有了一个数据结构,它可以处理您的数据,并且是100%可扩展的。很抱歉,我花了这么长时间来尝试这个方法,我正在寻找一种方法来构建第一个数组(用于场地元素)。最后它可以工作了!:)我刚刚将场地改为场地,并将$arr改为$results。在第一个foreach中,它可以正常工作。非常感谢。我从第一个错误中得到了这些错误:警告:非法字符串偏移量“场所”警告:array\u column()期望参数1为array,string given警告:array\u search()期望参数2为array,null given您确定
$result
包含您在问题中所说的内容吗?错误表明,
$result['Organizers']
为空,foreach循环的其他部分工作正常,因此它应该包含所有内容。我简化了这个问题(去掉了关于组织者的部分,只留下场地,结构还是一样的)。我确实在Events元素中输入了一个ID为“VenueID”标识符的打字错误,但是Vincements元素有“HallID”标识符。同样的错误。它看起来不错,所以我必须再仔细研究一下,我不知道出了什么问题。我试着将它全部分离,只运行第一部分:
$venue = [];
foreach($arr['Venue'] as $vals) {
    $venue[$vals['HallID']] = $vals['VenueName'];
}
foreach($results['Events'] as $values) {
     echo '<tr><td>' . $values['EventTitle'] . '</td>';
     echo '<td>' . $venue[$values['Details']['VenueID']] . '</td>';
     echo '<td>' . $organizer[$values['Details']['OrganizerID']] . '</td>';
     echo '<td>' . $values['Details']['EventDate'] . '</td></tr>';
}
foreach($results['Events'] as $values)

{
        echo '<tr><td>' . $values['EventTitle'] . '</td>';
        echo '<td>' . $results['Venues'][array_search($values['Details']['VenueID'], array_column($results['Venues'], 'HallID'))]['VenueName'] . '</td>';
        echo '<td>' . $values['Details']['EventDate'] . '</td></tr>';
}

?>