2013-03-17 156 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;