使用foreach遍历只有一个元素的数组

3
我正在制作一个脚本来解析XML并输出HTML表单。以下是已解析的XML部分内容(使用print_r输出)。
[title] => Base
[id] => base
[type] => radio
[items] => Array
    (
        [item] => Array
            (
                [title] => item
                [id] => item_id
            )

    )

这是显示HTML输出的代码:
    foreach($category["items"]["item"] as $item){
        echo '<input type="radio" name="'.$category["id"].'" value="'.$item["id"].'">'.$item["title"].'</input><br>';
    }

但是我得到的不是“item”和“item_id”,而是只有“i”。与Array and foreach - Stack Overflow中的问题相同。当有两个或更多的“item”数组时,它可以正常工作。是否有任何方法可以修复这个问题,而不必为一个项目数组制定特定的异常处理,例如if(count($array) == 1) ... 编辑 以下是多个项目数组的示例:
[title] => K
[id] => k
[type] => radio
[items] => Array
    (
        [item] => Array
            (
                [0] => Array
                    (

                        [title] => n
                        [id] => n_id

                    )

                [1] => Array
                    (
                        [title] => Y
                        [id] => y_id

                    )

            )

    )

3
请将 foreach($category["items"]["item"] 中的 ["item"] 删除。 - Yoshi
似乎在这里运行正常:http://codepad.org/PZGbM5Ag - Naftali
顺便提一下:你得到了“i”,因为它是[title]中“item”的第一个字符(“id”转换为0)。 - Wrikken
2个回答

8
你需要:
foreach($category["items"] as $item){
因为item只是数组items的第一个元素的键。

我知道这对于这个问题可以起作用,但是当有多个$category["items"]["item"]时呢? - nebkat
@Neb:如果你的数组中有多个[item],它是什么样子的呢?因为PHP不能重复使用相同的键;) - Wrikken
@Neb,它可以适用于多个。我认为你还没有理解foreach的工作原理。foreach以数组(不是第一个元素)作为参数,并迭代每个元素。 - OZ_
编辑了第一篇帖子。我能看出多个和单个之间的区别,但在xml文件中它们都是以相同的方式编写的。也许我的唯一选择是修改xml解析器,即使只有一个项目,也要生成$category["items"]["item"]["0"]? - nebkat
@Neb,嗯...现在是另一种结构。定义一下,你需要哪种结构才能得到正确的答案。 - OZ_
我只会修改XML解析器。似乎没有其他办法。答案已接受,谢谢;) - nebkat

3

从foreach循环中删除["item"]

...
foreach($category["items"] as $item){
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接