在foreach循环中访问数组的特定元素

时间:2015-03-18 14:16:29

标签: php arrays

如果这是一个非常简单的问题我很抱歉 - 我在这里阅读了很多帖子,但我的问题在语法上很难搜索,所以我没有找到了答案。

我有一个json数组,它来自公司的API:

[Result] => Array
        (
            [cData] => Array
                (
                    [0] => Array
                        (
                            [Reqa] => ABCD
                            [Reqb] => 
                            [Reqc] => Plus
                            [dto] => Array
                                (
                                    [0] => Array
                                        (
                                            [ComID] => 43292392                                            
                                            [Comment] => Dave
                                        )

                                    [1] => Array
                                        (
                                            [ComID] => 43292392                                            
                                            [Comment] => Bob
                                        )

                                )

                            [XREFSearchOperation] => Exact
                        )

                    [1] => Array
                        (
                            [Reqa] => BCDE
                            [Reqb] => 
                            [Reqc] => A
                            [dto] => Array
                                (
                                    [0] => Array
                                        (
                                            [ComID] => 19331186                                            
                                            [Comment] => Mike
                                        )

                                    [1] => Array
                                        (
                                            [ComID] => 19331186
                                            [Comment] => Roger
                                        )

                                )

                            [XREFSearchOperation] => Starts With
                        )

                    [2] => Array
                        (
                            [Reqa] => QQDT
                            [Reqb] => 
                        )

                )

        )

)

我试图访问[ComID][Comment]元素(如果存在),在foreach循环内并将其分配给变量$y

到目前为止,我有:

foreach ($json['Result']['cData']['dto'] as $i) {
 $y = "{$i['ComID']}|{$i['Comment']}";
}

但是这给了我零结果。我理解为什么,因为在['cData']['dto']之间有[0][1][2] etc..元素,而且我不知道如何将那些的限定符添加到循环中。

更新

此代码适用于大多数json响应:

foreach ($json['Result']['cData'] as $i) {
    if(array_key_exists('dto', $i)) {
      foreach ($i['dto'] as $j) {
 $y = "{$j['ComID']}|{$j['Comment']}";
      } else {
        }      
    } 

但是 - 我还有一个小问题。如果有多个[dto]回复,您将[dto][0][ComID]然后[dto][1][ComID][dto][2][ComID],(如上例所示),但如果只有一个响应,您将[dto][ComID],因为不需要该中间阵列。

我尝试编写if(array_key_exists('dto[0]'来执行一个,然后事件dto[0]中的else语句不存在,但那不起作用。如果foreach下面没有数组,我需要一种不执行"foreachicize"循环的方法。是否有可以编写的if / else语句来容纳这个?

2 个答案:

答案 0 :(得分:1)

可能需要嵌套foreach

foreach ($json['Result']['cData'] as $i) {
    foreach($i['dto'] as $j) {
        $y[] = "{$j['ComID']}|{$j['Comment']}"; //need an array here
    }
}

更新问题。检查$i['dto'][0]是否存在:

foreach ($json['Result']['cData'] as $i) {
    if(isset($i['dto'][0]))) {
        foreach($i['dto'] as $j) {
            $y[] = "{$j['ComID']}|{$j['Comment']}";
        }
    } else {
        $y[] = "{$j['ComID']}|{$j['Comment']}";
    }
}

可能有更好的方法,但我要出去了。

答案 1 :(得分:0)

另一种方法:

foreach($json['Result']['cData'] as $cData) 
{
    foreach($cData['dto'] as $dto) 
    {
        if(array_key_exists('ComID', $dto) && array_key_exists('Comment', $dto))
        {
            $y = "{$dto['ComID']}|{$dto['Comment']}";
        }
    }
}