2013-03-17 90 views
0

我試圖解決以下問題:PHP多維數組打印到瀏覽器中顯示嵌套數組

注意我是新來的編程和PHP和合作,通過SAMS PHP, MySQL and Apache (Julie C. Meloni).

還有就是多維數組有一個鍛鍊被創建。外部陣列是列出電影類型的關聯陣列。流派陣列列出該流派​​的電影。然後你被要求打印出與該類型相關的電影列表的流派列表。

我的代碼:

<?php 
$genres = array(
    'Science Fiction' => array('Star Trek', 'Star Wars', 'Alien'), 
    'Drama' => array('Les Amant de Pont Neuf', 'War & Peace', 'Bridehead Revisited'), 
    'Crime' => array('Heat', 'Pulp Fiction', 'Messerine') 
); 
$gKeys = array_keys($genres); 
foreach ($gKeys as $genre) { 
    print $genre."<br/>"; 

} 
?> 

這工作,並打印出:

科幻

戲劇

犯罪

這裏是我跑到牆上的地方。當我嘗試後

print $genre; 

增加另一個foreach循環沒有結果出現在瀏覽器(除了第一循環的結果)。我已經嘗試了一切。例如:

  • 首先使用應用於$ genre的array_value()函數,然後嘗試對返回的數組執行foreach。
  • 在教科書中還提到了一個while(list($ x)=($ y))機制。
  • 我徹底重讀了數組章節,並在其他地方尋找無濟於事。

也許我錯誤地構造了多維數組?第二維數組是否也需要是關聯數組以保持一致性?

+0

你有什麼可以嘗試打印更多信息? – MatRt 2013-03-17 10:24:07

回答

1

你的陣列結構正確。你正在使用錯誤的數組(只是鍵的數組),並在print $genre;之後添加另一個foreach循環,因此它不起作用。不,第二維數組也不需要是關聯數組。

<?php 

$genres = array(
    'Science Fiction' => array('Star Trek', 'Star Wars', 'Alien'), 
    'Drama' => array('Les Amant de Pont Neuf', 'War & Peace', 'Bridehead Revisited'), 
    'Crime' => array('Heat', 'Pulp Fiction', 'Messerine') 
); 

foreach ($genres as $genre => $movies) 
{ 
    print $genre . " - <br/>"; 
    foreach ($movies as $movie) 
    { 
     print $movie . "<br/>"; 
    } 
    print "</br>"; 
} 
?> 
0

等等!你爲什麼這樣做:

$gKeys = array_keys($genres); 

這只是給你一個單一的數組。

做你的第一個環上$流派,那裏面:

foreach ($genre as $key=>$subgenre) 
{ 
    //do stuff here 
} 
+0

感謝ro ko和其他人。你的快速回復已經保存了我的理智,當時我正在經歷信息超載,一起學習大量新事物。我正在瀏覽每個解決方案,以確保我瞭解每種方法的工作原理。非常具有啓發性。乾杯! – irishetcher 2013-03-18 16:26:52

0
foreach ($genres as $genrekey => $genrevalue) { 
    print $genrekey."<br/>"; 
    foreach ($genrevalue as $value) { 
    print $value."<br/>"; 
    } 
} 
0

你的外部陣列是一個關聯數組與流派作爲鍵。

要打印出電影該流派的(子陣列),使用其他的foreach如下:

print "<ul>"; 
foreach ($genres as $genre => $movies) { 
    print "<li>".$genre."<ul>"; 
    foreach ($movies as $movie) { 
     print "<li>".$movie."</li>"; 
    } 
    print "</ul></li>"; 
} 
print "</ul>"; 
0
function multiarray_keys($ar) { 

     foreach($ar as $k => $v) { 
      $keys[] = $k; 
      if (is_array($ar[$k])) 
       $keys = array_merge($keys, multiarray_keys($ar[$k])); 
     } 
     return $keys; 
    } 


    $gKeys = multiarray_keys($genres); 
echo "<pre>"; 
print_r(multiarray_keys($array)); 
echo "</pre>"; 
0

如果你需要這個看到的數據都會在一個陣列用於調試的目的,您只能使用PHP var_export(),var_dump(),print_r()以確保數據按照您的要求填充。否則,如果你想在生產中展示它,你可以這樣做:

foreach($multiDimentinalArray as $key => $value): 
    if(is_array($value)): 
     foreach($value as $k => $val): 
       print " $key.$k => $val"; 
    else: 
      print "$key => $value"; 
    endif; 
endforeach;