0

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

我通过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. 我如何“挖掘”这样结构的数组中的相关信息(“数据”和“整数”)?到目前为止,我正在处理更简单的数组(不是那么“深”)。我正在尝试通过 foreach 循环

foreach($googleKeywords->CompleteSuggestion 作为 $suggestion){

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

但不断收到“尝试获取非对象的属性”错误。

  1. 正如您注意到的一些数据不完整 - “数据”中有一个名称但没有对应的“int”......是否有办法回显“无数据”是否未设置“int”?

一切顺利,

亚当

4

2 回答 2

1

你可以试试这个(代码更新)

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

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

我会留给你来格式化输出。

if语句检查是否设置了所有数据(您期望 2 个项目,数据和 int)。您可以有一个else{}部分显示“未设置数据”。循环是必要的for,因为您不知道有多少元素,而这种for循环方式为您解决了问题。它将遍历数组中的所有元素,无论是只有 1 还是 9 或其他任何元素。如果数组中有零个元素,for则将跳过循环。

希望这可以帮助。

于 2012-09-10T05:09:19.547 回答
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。对不起,代码的格式很糟糕,仍然不确定如何在这里正确执行....我通常只是放 <pre>,但现在它变得疯狂了....

于 2012-09-12T01:19:29.507 回答