繁体   English   中英

php中的多维数组

[英]Multi Dimensional arrays in php

我是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"];

请指导我

你应该使用你的调试技巧来解决这类问题。

  • 首先, print_r()你的$数组,你做了。
  • 然后print_r($array['query'])
  • 然后print_r($array['query']['results'])
  • 等等等等

当你到达print_r($array["query"]["results"]["item"]["resource"]) ,你会看到结果不是数组,它是一个标量,因此你需要一个不同的索引。

祝好运!

也许是因为你没有正确关闭[“0”]数组

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

从您的粘贴:

[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']
  • ["0" - 你没有关闭括号 - 例如['0']

你忘记了[“0”]

还要忽略“0左右,因为你通过索引而不是名字来调用元素:

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

对于meta,您使用了两种不同的“。一次”和一次“。 收盘“需要与开盘时的类型相同。

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] - 您必须关闭括号。

Morgen32是正确的。 你没有关闭开幕式[

此外,您可以通过键入来执行与您正在使用的“API”相同的操作

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

在代码中创建数组的位置下方。

很抱歉这篇文章的篇幅 - 它更像是一个迷你教程,但希望这应该会给你一些好的概念,这将有助于你解决这个问题。 我会推荐几种方法。

建议#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这样的东西)。 这里有一些PHP输出缓冲与var_dump: 如何将var_dump的结果捕获到字符串?

不要将数字索引(0)括在引号中:

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

编辑:iirc数字和字符串索引之间存在差异。 尽管如此,真正的问题似乎是你没有关闭一个括号,并且在meta附近混合了单/双引号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM