PHP中的多维数组

4

我是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] => 数组

我无法使用 :(

echo $array["query"]["results"]["item"]["resource"]["meta']["0"["content"];

请指导我。

8个回答

6

您应该使用调试技巧来解决这种问题。

  • 首先,打印出您的 $array,您已经做到了。
  • 然后打印出 $array['query']
  • 接着打印出 $array['query']['results']
  • 以此类推

当您到达 print_r($array["query"]["results"]["item"]["resource"]) 时,您会发现结果不是一个数组,而是一个标量,因此您需要使用不同的索引。

祝您好运!


3
也许是因为您没有正确关闭["0"]数组。
echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"]

2

从您的粘贴板中:

[query] => Array (
  [results] => Array (
    [item] => Array (
      [resource] => "http://twitter.com/twitter"
      [meta] => Array (
        [0] => Array (
          [content] => "Twitter"
(...)

$array["query"]["results"]["item"]["resource"]不是一个数组,而是一个字符串;您可能想要的是在$array["query"]["results"]["item"]中的meta数组(与resource处于同一级别)。下面是可行的代码:

echo $array["query"]["results"]["item"]["meta"]["0"]["content"];

此外,您有两个拼写错误:

  • ["meta'] - 您使用双引号 " 打开 meta,并尝试使用单引号 ' 关闭 - 它们必须相同 - 例如 ['meta']
  • ["0" - 您没有关闭括号 - 例如 ['0']

1

你忘了在["0"]处加上一个"]"

另外,要省略掉0周围的引号,因为你是通过索引而不是名称来调用该元素:

$array["query"]["results"]["item"]["resource"]["meta"][0]["content"]

对于元数据,你使用了两种不同的引号符号。一次使用了双引号",一次使用了单引号'。结尾的引号必须与开头的引号相同。


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] - 你必须闭合括号。


0

Morgen32 是正确的。您没有关闭开头的[

此外,您可以通过输入相同的内容来执行使用的“API”

echo "<pre>".print_r($array, true)."</pre>";

在你创建数组的代码下方。


0

非常抱歉此篇文章有些冗长,更像是一篇迷你教程,但希望能够给您提供一些实用的概念,帮助您解决这个问题。我推荐以下几种方法。

建议 #1,在使用print_r时,尝试使用以下方式:

print_r ($array[query], 1);

通过将返回标志设置为true,您可以添加一个“return”。这样做的优点是您可以像这样嵌入它:

<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的工具)。关于PHP输出缓冲和var_dump的一些内容可以在这里找到:如何将var_dump的结果捕获到字符串中?


谢谢这个小教程,我学到了一些新东西 :) - ramesh

-1

不要用引号括起来你的数字索引(0):

echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"];

编辑:如果我没记错,数字索引和字符串索引之间有区别。然而,真正的问题似乎是你没有关闭一个括号,并且在 meta 周围混合使用了单引号和双引号。

这应该报告语法错误...


1
没关系,无论索引是否带引号,你仍然会得到值。 - Piskvor left the building
但是即使使用["0"],我仍然获得了所需的输出。 - ramesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接