我刚接触过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']."
";
echo $array["query"]["results"]["item"]["resource"];
号
但是,当我想使用[meta] => Array时
我无法使用:(
echo $array["query"]["results"]["item"]["resource"]["meta']["0"["content"];
请指引我
您应该使用您的调试技巧来解决这类问题。
首先,print_r()你的$array,你做到了。
然后是print_r($array['query'])。
然后是print_r($array['query']['results'])。
等等,等等
当您到达print_r($array["query"]["results"]["item"]["resource"])时,您会看到结果不是一个数组,而是一个标量,因此您需要一个不同的索引。
祝你好运!
嗨,谢谢你分享这个精彩的提示……非常有帮助。
+教鱼1)
@谢谢:)
可能是因为您没有正确关闭["0"]数组
echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"]
不仅是[0],还有meta。
从您的粘贴:
[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,用单引号'关闭meta—它们必须是相同的—例如['meta']。
["0"—你没有关上支架—例如['0']。
+第一个注意到资源是字符串的人。
是的,很好的接球+1
echo $array["query"][count]."
";
echo $array["query"]["results"]["item"]["resource"];
count应该是"count",否则php认为count是一个常量。
echo $array["query"]["results"]["item"]["resource"]["meta']["0"["content"];
。
"meta'应该是"meta",您必须使用相同的报价类型。
["0"应为["0"]或[0]—必须关闭支架。
谢谢你的小费。
你忘了]在["0"]
也不要使用"大约0",因为您是按索引而不是按名称调用thins elemnt:
$array["query"]["results"]["item"]["resource"]["meta"][0]["content"]
对于meta,您使用了两种不同的类型。一次"一次"。"关闭"必须与"打开"类型相同。
对这篇文章的长度感到抱歉-它更像是一个迷你教程,但希望这能给你一些好的概念,让你可以利用它来解决这个问题。我会推荐几种方法。
建议1,当您使用打印时,请尝试如下使用:
print_r ($array[query], 1);
这将允许您通过将返回标志设置为"真"来添加"返回"。这样做的好处是您可以像这样嵌入它:
[cc lang="php"] <?php echo (print_r($array[query], 1)); ?>
。
这将在HTML中打印一个"预格式化"数组,它将保留所有空格和换行符。有关详细信息,请参阅http://php.net/manual/en/function.print-r.php。我不会详细介绍如何执行此操作,但这里有很多教程可以帮助您开始:http://www.java2s.com/code/php/data-structure/loopingthroughamultimensionalarray.htm(也可以是http://php.net/manual/en/control-structures.foreach.php)。
下面是一个使用上面的对象代码的简单示例:
建议2.当我使用由数据库结果生成的API和"数组"时,我经常会发现类型实际上是错误的。例如,您经常会得到一些看起来像数组,但实际上是stdObject的东西。即使不是这样,我也建议您尝试这个函数(从http://php.net/manual/en/function.var dump.php):
[cc lang="php"]<?php$a = array(1, 2, array("a","b","c"));
var_dump($a);
?>
号
对象和数组做类似的事情,但是使用这种方法可以避免注意和可能的心痛,因为var_dump还显示对象类型和长度。您可以尝试:
$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/";
?>
[cc lang="php"]
ob_start();
var_dump($book);
$a = ob_get_clean();
$b = print_r($book,1);
echo($a."
".$b);
?>
号
这也引入了输出缓冲,这可能会影响性能,但我已经节省了像这样的失败调试的5个小时(另外,您还需要使用Zend调试或xdebug之类的东西)。这里有一点关于使用var_dump的php输出缓冲:如何将var_dump的结果捕获到字符串中?
- 谢谢你的迷你教程……我学习了一些新东西:)
- 没问题,hth;)
Morgen32是正确的。你还没关门呢[
此外,您还可以通过键入
[cc lang="php"]echo"[cc lang="php"]".print_r($array, true).";
在代码中创建数组的位置下方。
不要将数字索引(0)括在引号中:
[cc lang="php"]echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"];号
编辑:IIRC数字索引和字符串索引有区别。然而,真正的问题似乎是您没有结束一个括号,并且在meta周围混合了单/双引号。
这应该报告语法错误…
这没关系,不管索引是否在引号中,您仍然可以得到值。
但是我得到了期望的输出,即使是用["0"]