2010-11-16 76 views
1

我有一個數組的數組裏面,我想簡單地打印出它的內容......是什麼問題,我想不工作...即在數組內部顯示數組?

 foreach($retval as $k=>$v){ 

      if (is_array($v)){ 

      foreach($v as $l=>$w){ 

      echo $l . ' = ' . $w . '<br />'; 

      } 

     } else { 

      echo $k . ' = ' . $v . '<br />'; 

     } 

這樣做是但是我結束了:

ID = 2

名稱=揚聲器

form_field =隱藏

display_order = 0

組=陣列

所以我不會在這裏面得到數組一個foreach ..我究竟做錯了什麼?看起來實際上我的代碼認爲每個返回都是一個數組,當我確信只有'組'是一個數組。


陣列的結構看起來像這樣:

array (0 => array ('id' => 2, 'name' => 'Speakers', 'form_field' => 'hidden', 'display_order' => '0', 'groups' => array (0 => array ('bit' => '1', 'name' => 'don', 'display_order' => '4', 'subscribers' => 8,), 1 => array ('bit' => '2', 'name' => 'tyler', 'display_order' => '5', 'subscribers' => 0,), 2 => array ('bit' => '4', 'name' => 'stephen', 'display_order' => '6', 'subscribers' => 0,), 3 => array ('bit' => '8', 'name' => 'daniel', 'display_order' => '7', 'subscribers' => 0,), 4 => array ('bit' => '16', 'name' => 'william', 'display_order' => '8', 'subscribers' => 0,), 5 => array ('bit' => '32', 'name' => 'bobbys', 'display_order' => '9', 'subscribers' => 0,),),),) 

長話短說,我其實只是想爲說這個名字「博比」來搜索這件事,並得到一個簡單的真或者假設該值是否存在於那裏。

+0

那麼你的陣列結構是什麼樣子?你可以使用'var_export($ retval)' – drudge 2010-11-16 23:51:56

+0

來感謝它 - 我已經更新了這篇文章。 – willdanceforfun 2010-11-16 23:56:11

+1

FWIW,你嵌套的'foreach()'不顯示任何縮進,所以它會產生誤導輸出。 – staticsan 2010-11-17 02:29:10

回答

1

假設數組只是雙重嵌套,而$retval[<something>]['groups']也是一個數組。使用遞歸來處理這個問題,而不是僅僅在關卡上添加關卡。

+0

他們深入2層以上?!?這是瘋狂的 – willdanceforfun 2010-11-16 23:59:37

+0

感謝ignacio,我正在查找現在遞歸搜索的東西。 – willdanceforfun 2010-11-17 00:02:17

+0

我已經使用七個維度的數組,並且嵌套了四個深度的循環。做了一些計劃,讓我告訴你。 – staticsan 2010-11-17 02:30:18

3
print_r($myArray); 

PHP Manual

<?php 
    $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z')); 
    print_r ($a); 
?> 

會給:

Array 
(
    [a] => apple 
    [b] => banana 
    [c] => Array 
     (
      [0] => x 
      [1] => y 
      [2] => z 
     ) 
) 

不知道這是你在找什麼...

print_r()給你,而var_export()的可視化表示返回有效的,可執行的PHP代碼。 Manual: var_export()

+0

我很感激。歡呼粉紅色弗洛伊德 – willdanceforfun 2010-11-17 00:02:47

1

使用RecursiveArrayIterator裹在RecursiveIteratorIterator。那麼語法爲:

$arr = array('this is your complicated multi-dimensional array'); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 
foreach($iterator as $key => $value){ 
    echo '['.$key.'] => '.$value.'<br />'; 
} 

你甚至可以使用$iterator->depth()來確定當前元素的深度。

1

這聽起來像你需要重新考慮你想要做的事情。

如果您只想查看數組中的內容,以便知道如何獲取某個特定數據,那麼您可能會使用print_r,var_export或上面提到的類似方法。

print_r($retval); 

如果你想你的PHP腳本能夠制定出在它自己的「博比」是否在陣中,那麼你可能有一些更多的信息,這將有助於你的搜索。例如,你知道你的數組的結構,並且你正在尋找一個名字嗎?如果是這樣,那麼你只需要檢查$ array [$ foo] ['name']中的字符串。你可以調整你的代碼如下所示:

foreach($retval as $k=>$v) { 
    if ($v['name'] == 'bobby') { 
     echo "Bobby is at index $k"; 
    } 
} 

PHP包含lots of functions for arrays,但這些往往是單維數組。

P.S.請編輯數組的結構以使其更易於閱讀。

1

如果你的目標是要了解某個值在任何嵌套數組,你可以這樣做:

foreach($retval as $vec){ 
    if(in_array("bobby", $vec) 
     do something