php中的多维数组

Multi Dimensional arrays in php

我刚接触过PHP(从1周开始学习)。我正在学习阵列。在执行此操作时,我发现了一个API,它以多维数组的形式给出结果。我无法回显数组的值。

样本响应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
                                        )
                                )
                        )
               )
        )
 )

我可以重复一些价值观……比如

1
2
echo $array["query"]['count']."<br />";  
echo $array["query"]["results"]["item"]["resource"];

但是,当我想使用[meta] => Array

我无法使用:(

1
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"])时,您会看到结果不是一个数组,而是一个标量,因此您需要一个不同的索引。

祝你好运!


可能是因为您没有正确关闭["0"]数组

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


从您的粘贴:

1
2
3
4
5
6
7
8
[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的级别相同)。这应该有效:

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

此外,您还犯了两个错误:

  • ["meta']—你用双引号"打开meta,用单引号'关闭meta—它们必须是相同的—例如['meta']
  • ["0"—你没有关上支架—例如['0']


1
2
echo $array["query"][count]."<br />";  
echo $array["query"]["results"]["item"]["resource"];

count应该是"count",否则php认为count是一个常量。

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

"meta'应该是"meta",您必须使用相同的报价类型。

["0"应为["0"][0]—必须关闭支架。


你忘了]在["0"]

也不要使用"大约0",因为您是按索引而不是按名称调用thins elemnt:

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

对于meta,您使用了两种不同的类型。一次"一次"。"关闭"必须与"打开"类型相同。


对这篇文章的长度感到抱歉-它更像是一个迷你教程,但希望这能给你一些好的概念,让你可以利用它来解决这个问题。我会推荐几种方法。

建议1,当您使用打印时,请尝试如下使用:

1
print_r ($array[query], 1);

这将允许您通过将返回标志设置为"真"来添加"返回"。这样做的好处是您可以像这样嵌入它:

1
[cc lang="php"] <?php  echo (print_r($array[query], 1)); ?>

1
2
3
4
<P>这将在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)。</P><P>下面是一个使用上面的对象代码的简单示例:</P><P>建议2.当我使用由数据库结果生成的API和"数组"时,我经常会发现类型实际上是错误的。例如,您经常会得到一些看起来像数组,但实际上是stdObject的东西。即使不是这样,我也建议您尝试这个函数(从http://php.net/manual/en/function.var dump.php):</P>[cc lang="php"]<?php
$a = array(1, 2, array("a","b","c"));
var_dump($a);
?>

对象和数组做类似的事情,但是使用这种方法可以避免注意和可能的心痛,因为var_dump还显示对象类型和长度。您可以尝试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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/";
?>
[cc lang="php"]
<?php
    ob_start();
    var_dump($book);
    $a = ob_get_clean();
    $b = print_r($book,1);
    echo($a."

"
.$b);
?>

1
<P>这也引入了输出缓冲,这可能会影响性能,但我已经节省了像这样的失败调试的5个小时(另外,您还需要使用Zend调试或xdebug之类的东西)。这里有一点关于使用var_dump的php输出缓冲:如何将var_dump的结果捕获到字符串中?</P><div class="suo-content">[collapse title=""]<ul><li>谢谢你的迷你教程……我学习了一些新东西:)</li><li>没问题,hth;)</li></ul>[/collapse]</div><p><center>[wp_ad_camp_2]</center></p><hr><P>Morgen32是正确的。你还没关门呢[</P><P>此外,您还可以通过键入</P>[cc lang="php"]echo"[cc lang="php"]".print_r($array, true)."

1
<P>在代码中创建数组的位置下方。</P><hr><P>不要将数字索引(0)括在引号中:</P>[cc lang="php"]echo $array["query"]["results"]["item"]["resource"]["meta"][0]["content"];

编辑:IIRC数字索引和字符串索引有区别。然而,真正的问题似乎是您没有结束一个括号,并且在meta周围混合了单/双引号。

这应该报告语法错误…