如果这是一个非常简单的问题我很抱歉 - 我在这里阅读了很多帖子,但我的问题在语法上很难搜索,所以我没有找到了答案。
我有一个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语句来容纳这个?
答案 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']}";
}
}
}