我正在寻找一种将多维数组输出为简单表的方法。
我通过使用简单函数
处理此处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"
}
}
}
}
}
现在我想输出它并面临两个问题:
foreach($googleKeywords->CompleteSuggestion as $suggestion){
echo"{$this->suggestion->data}";
}
但继续“尝试获取非对象属性”错误。
一切顺利,
亚当
答案 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;但它现在很疯狂......