我是php新手(从1周开始学习)。 我在学习数组。在做的时候,我发现了一个api,它以多维数组的形式给出了结果。 我无法回应数组的值..
示例回复
Array
(
[query] => Array
(
[count] => 1
[created] => 2010-07-16T08:35:38Z
[lang] => en-US
[results] => Array
(
[item] => Array
(
[rel] => rel:Person
[resource] => http://twitter.com/twitter
[meta] => Array
(
[0] => Array
(
[property] => foaf:name
[content] => Twitter
)
)
)
)
)
)
我可以回应一些价值观......比如
echo $array["query"]['count']."<br />";
echo $array["query"]["results"]["item"]["resource"];
但是,当我想使用[meta] => Array
我无法使用:(
echo $array["query"]["results"]["item"]["resource"]["meta']["0"["content"];
请指导我
答案 0 :(得分:5)
您应该使用调试技巧来解决此类问题。
print_r()
print_r($array['query'])
当你到达print_r($array['query']['results'])
时,你会发现结果不是一个数组,它是一个标量,因此你需要一个不同的索引。
答案 1 :(得分:3)
可能是因为你没有正确关闭[“0”]数组
echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"]
答案 2 :(得分:2)
来自您的粘贴:
[query] => Array (
[results] => Array (
[item] => Array (
[resource] => "http://twitter.com/twitter"
[meta] => Array (
[0] => Array (
[content] => "Twitter"
(...)
$array["query"]["results"]["item"]["resource"]
不是数组,而是字符串;您可能希望meta
内的$array["query"]["results"]["item"]
数组(与resource
相同)。这应该有效:
echo $array["query"]["results"]["item"]["meta"]["0"]["content"];
另外,你犯了两个拼写错误:
["meta']
- 您正在使用双引号"
打开元数据并尝试以单引号'
结束 - 它们必须相同 - 例如['meta']
["0"
- 你没有关闭括号 - 例如['0']
答案 3 :(得分:1)
你忘了]在[“0”]
同样忽略“0左右,因为你通过索引而不是名字来调用你的元素:
$array["query"]["results"]["item"]["resource"]["meta"][0]["content"]
对于meta,您使用了两种不同的“。一次”和一次“。 结束“必须与开头的类型相同。
答案 4 :(得分:1)
echo $array["query"][count]."<br />";
echo $array["query"]["results"]["item"]["resource"];
count
应为"count"
,否则PHP认为count是常量。
echo $array["query"]["results"]["item"]["resource"]["meta']["0"["content"];
"meta'
应为"meta"
,您必须使用相同类型的引用。
["0"
应为["0"]
或[0]
- 您必须关闭括号。
答案 5 :(得分:0)
Morgen32是正确的。你没有关闭开场 [
此外,您可以通过键入
来执行与您正在使用的“API”相同的操作echo "<pre>".print_r($array, true)."</pre>";
在代码中创建数组的位置下方。
答案 6 :(得分:0)
很抱歉这篇文章的篇幅 - 它更像是一个迷你教程,但希望这应该给你一些好的概念,这将有助于你解决这个问题。我会推荐几种方法。
建议#1 ,当您使用print_r时,请尝试使用它:
print_r ($array[query], 1);
这将允许您通过将return标志设置为true来添加“返回”。这样做的好处是你可以这样嵌入它:
<pre> <?php echo (print_r($array[query], 1)); ?> </pre>
这将在HTML中打印一个“预格式化”的数组,这将保留所有空格和换行符。有关详细信息,请参阅http://php.net/manual/en/function.print-r.php。我不会详细介绍如何执行此操作,但这里有相当多的教程可以帮助您入门:http://www.java2s.com/Code/Php/Data-Structure/LoopingThroughaMultidimensionalArray.htm(还http://php.net/manual/en/control-structures.foreach.php)
以下是使用上述目标代码的简单示例:
建议#2 。通常我发现当我使用API和从数据库结果生成的“数组”时,类型实际上是错误的。例如,您经常会看到类似于数组的内容,但实际上是stdObject。即使不是这种情况,我也建议你尝试这个功能(来自http://php.net/manual/en/function.var-dump.php):
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>
对象和数组做类似的事情,但是你可以通过使用这种方法来避免通知和可能的心痛,因为var_dump还显示了对象类型和长度。你可以尝试:
<?php
$book = new stdClass;
$book->title = "Harry Potter and the Prisoner of Azkaban";
$book->author = "J. K. Rowling";
$book->publisher = "Arthur A. Levine Books";
$book->amazon_link = "http://www.amazon.com/dp/0439136369/";
?>
<pre>
<?php
ob_start();
var_dump($book);
$a = ob_get_clean();
$b = print_r($book,1);
echo($a."\n\n".$b);
?>
</pre>
这也引入了输出缓冲,这可能会影响性能,但是我已经节省了数小时的挫折调试(同样,你会想要使用像Zend-debug或Xdebug这样的东西)。这里有一些关于var_dump的PHP输出缓冲:How can I capture the result of var_dump to a string?
答案 7 :(得分:-1)
不要将数字索引(0)括在引号中:
echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"];
编辑:iirc数字和字符串索引之间存在差异。尽管如此,真正的问题似乎是你没有关闭一个括号,并且在meta附近混合单/双引号。
这应该报告并且语法错误......