【问题标题】:foreach with one item arrayforeach 与一项数组
【发布时间】:2011-09-10 06:43:11
【问题描述】:

我正在制作一个解析 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 相同的问题。当有两个或多个“项目”数组时,它可以正常工作。有没有办法解决这个问题,而不必为 1 个项目数组设置一个特定的例外,例如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

                    )

            )

    )

【问题讨论】:

  • 删除foreach($category["items"]["item"]中的["item"] ;)
  • 似乎在这里工作:codepad.org/PZGbM5Ag
  • 顺便说一句:你得到"i",因为它是[title] 中“项目”的第一个字符("id" 转换为0)。

标签: php arrays for-loop foreach


【解决方案1】:

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

【讨论】:

  • 我知道这可以解决这个问题,但是当有多个$category["items"]["item"]s 时呢?
  • @Neb:你的数组有多个[item]'s 是什么样子的?因为 PHP 不能两次使用同一个键 ;)
  • @Neb,它适用于多个。我想你还不知道foreach 是如何工作的。 foreach 将数组(不是第一个元素)作为参数,并迭代每个元素。
  • 编辑了第一篇文章。我可以看到多个和单个之间的区别,但是在 xml 文件中它们的编写方式相同。也许我唯一的选择是修改 xml 解析器以生成 $category["items"]["item"]["0"] 即使只有一个项目?
  • @Neb,嗯...现在是另一个结构。定义,您必须使用哪种结构才能为您的案例获得正确答案。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2016-09-24
    相关资源
    最近更新 更多