2011-06-07 35 views
2

我正在做一个脚本,分析一个XML并输出一个HTML表单。这是分析的xml的一部分(print_r)。与一个项目数组的foreach

[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_ID”但我得到的“i”上了自己的两个。与Array and foreach - Stack Overflow相同的问题。当有两个或多个“item”数组时,它可以正常工作。有没有什么办法可以解决这个问题,而不必为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 

        ) 

      ) 

    ) 
+3

删除'[ “项目”]''中的foreach($类别[ “项目”] [ “项目”]';) – Yoshi 2011-06-07 17:25:09

+0

似乎是在这里工作:http://codepad.org/PZGbM5Ag – Neal 2011-06-07 17:26:50

+0

顺便说一句:因为它是'[title]'('“id”'转换为'0')中的“item”的第一个字符,所以你得到''i“'。 – Wrikken 2011-06-07 17:40:41

回答

7

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

+0

我知道这会起作用,但是如果有多个'$ category [“项目”] [“item”]呢? – nebkat 2011-06-07 17:36:25

+0

@Neb:你的数组看起来像多个'[item]'?因为PHP不能使用相同的密钥两次;) – Wrikken 2011-06-07 17:38:52

+0

@Neb,它将适用于多个。我认为你还没有得到'foreach'的工作方式。 ['foreach'](http://ru2.php.net/manual/en/control-structures.foreach.php)将数组(不是第一个元素)作为参数,并迭代每个元素。 – 2011-06-07 17:39:32

3

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

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