2010-07-16 39 views
4

我是PHP新手(自1周以來學習)。 我正在學習數組。在做的過程中,我發現一個API,它給出了結果多維數組的形式.. ,我無法呼應陣列..在php中的多維數組

樣本響應

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 
             ) 
           ) 
         ) 
       ) 
     ) 
) 

的值我可以附和一些values..like

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

,但是,當我想用​​[meta] => Array

我不能夠使用:(

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

請指導我

回答

5

您應該使用您的調試技巧來解決這類問題。

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

當你到print_r($array["query"]["results"]["item"]["resource"]),你看到的結果不是一個數組,這是一個標量,因此你需要一個不同的指數。

祝你好運!

+0

嗨,感謝分享這個奇妙的提示..很有幫助。 – ramesh 2010-07-16 12:01:31

+0

+1教魚:) – Piskvor 2010-07-16 12:02:32

+0

@Piskvor:謝謝:) – 2010-07-16 12:16:31

3

也許是因爲你不關閉[ 「0」]數組正確

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

不僅[0],meta也是如此。 – JochenJung 2010-07-16 11:41:01

-1

不封閉您的數字索引(0)以引號括起:

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

編輯:iirc數字和字符串索引之間存在差異。不過,真正的問題似乎是你沒有關閉一個括號,並且圍繞meta有單引號/雙引號。

這應該報告和語法錯誤......

+1

這並不重要,無論索引是否在引號中,您都會得到該值。 – Piskvor 2010-07-16 11:58:32

+0

,但即使使用[「0」]我也得到了期望的輸出 – ramesh 2010-07-16 12:02:36

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"](與resource相同)。這應該工作:

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

此外,您還做了兩個錯別字:

  • ["meta'] - 你用雙引號"開元,並試圖關閉與單引號' - 他們必須是相同的 - 例如['meta']
  • ["0" - 您沒有關閉支架 - 例如['0']
+0

+1第一個注意到* resource *是字符串的人。 – Gumbo 2010-07-16 11:47:27

+0

是的,好趕上+1 – Znarkus 2010-07-16 12:06:37

1

你忘]在[ 「0」]

也離開了「,圍繞0,因爲你,而不是由對罵通過索引elemnt變薄:

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

而且對於元你使用了兩種不同的「。一次「和一次」 關閉「需要與開放類型相同。

0

Morgen32是正確的。你有沒有關閉開啓[

此外,您還可以做同樣的「API」你使用的是由下面的代碼所創建的地方打字

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

做陣列。

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

count"count",否則PHP認爲計數是一個常數。


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

"meta'應該是"meta",則必須使用同一類型的報價。

["0"應該是["0"][0] - 您必須關閉括號。

+0

感謝您的提示。 – ramesh 2010-07-16 12:02:05

0

對不起,關於這篇文章的長度 - 它更像是一個迷你教程,但希望這應該給你一些好玩的概念,以幫助你解決這個問題。我會推薦幾種方法。

諮詢#1,當您使用print_r的,請嘗試使用它像這樣:

print_r ($array[query], 1); 

這將允許您添加一個由返回標誌設置爲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://rads.stackoverflow.com/amzn/click/0439136369"; 
?> 
<pre> 
<?php 
    ob_start(); 
    var_dump($book); 
    $a = ob_get_clean(); 
    $b = print_r($book,1); 
    echo($a."\n\n".$b); 
?> 
</pre> 

這也引入了輸出緩衝,這可能會影響性能,但是我救可以小時的挫折調試像這樣(也,你會想使用類似Zend的調試或Xdebug的)的。有一點在PHP輸出緩衝與var_dump在這裏:How can I capture the result of var_dump to a string?

+0

感謝您的迷你教程..我傾斜了一些新的東西:) – ramesh 2010-07-16 19:58:22

+0

沒問題,HTH;) – 2010-07-17 11:54:09