输出多维数组 - 多个级别

时间:2012-09-10 01:03:31

标签: php arrays multidimensional-array

我正在寻找一种将多维数组输出为简单表的方法。

我通过使用简单函数

处理此处http://google.com/complete/search?output=toolbar&q=adam的xml来获得它
function convertXmlObjToArr($obj) { 
$json = json_encode($obj);
$array = json_decode($json,TRUE);

return $array;

}

并得到一个数组

   array(1){ ["CompleteSuggestion"]=>
  array(10) {
    [0]=>
    array(1) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(12) "adam sandler"
        }
      }
    }
    [1]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(11) "adam levine"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(8) "33200000"
        }
      }
    }
    [2]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(12) "adam carolla"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(7) "5570000"
        }
      }
    }
    [3]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(12) "adam lambert"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(8) "45400000"
        }
      }
    }
    [4]=>
    array(1) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(17) "adam sandler died"
        }
      }
    }
    [5]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(19) "adam sandler movies"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(8) "43600000"
        }
      }
    }
    [6]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(13) "adam morrison"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(8) "13800000"
        }
      }
    }
    [7]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(10) "adams golf"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(8) "30500000"
        }
      }
    }
    [8]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(10) "adam yauch"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(8) "19700000"
        }
      }
    }
    [9]=>
    array(2) {
      ["suggestion"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["data"]=>
          string(9) "adam west"
        }
      }
      ["num_queries"]=>
      array(1) {
        ["@attributes"]=>
        array(1) {
          ["int"]=>
          string(9) "137000000"
        }
      }
    }
  }
}

现在我想输出它并面临两个问题:

  1. 如何“挖掘”这样结构化的数组中的相关信息(“data”和“int”)?到目前为止,我正在处理更简单的数组(不是那么“深”)。 我试图通过foreach循环来实现它
  2. foreach($googleKeywords->CompleteSuggestion as $suggestion){

    echo"{$this->suggestion->data}"; }

    但继续“尝试获取非对象属性”错误。

    1. 正如您注意到某些数据尚未完成 - “数据”中有一个名称但没有对应的“int”...有没有办法回显“无数据”是否未设置“int”?
    2. 一切顺利,

      亚当

2 个答案:

答案 0 :(得分:1)

您可以尝试(代码更新)

foreach($googleKeywords['CompleteSuggestion'] as $suggestion){
    if (count($suggestion) == 2) {
        echo $suggestion['suggestion']['@attributes']['data'];
        echo $suggestion['num_queries']['@attributes']['int'];
    }
}

至少应该让您了解如何访问数组元素。

我会留给你格式化输出。

if语句检查是否已设置所有数据(您希望有2个项目,包括data和int)。你可以有一个else{}部分,回应“未设置数据”。 for循环是必要的,因为您不知道有多少元素,这种for循环样式可以为您提供帮助。它将循环遍历数组中的所有元素,无论是只有1还是9,还是其他什么。如果数组中有零个元素,则会跳过for循环。

希望这有帮助。

答案 1 :(得分:0)

谢谢,

最终代码涉及嵌套循环,如下所示:

<pre>foreach($keywords as $suggestion){
 foreach ($suggestion as $finalSuggestion){
   echo "<p>".$finalSuggestion['suggestion']['@attributes']['data']."</p>";
   echo $finalSuggestion['num_queries']['@attributes']['data']."<br/>";
    if (array_key_exists('num_queries', $finalSuggestion)) {
    echo "<p> ".$finalSuggestion['num_queries']['@attributes']['int']." </p>";
    }
    else
        {
        echo "<p>no data</p> ";
    }
     }

}
</pre>  

PS。对不起代码的糟糕格式,仍然不知道如何正确地在这里做....我通常只是把&lt;预&GT;但它现在很疯狂......