PHP多维数组打印到浏览器显示嵌套数组

时间:2013-03-17 10:21:02

标签: php arrays

我正在尝试解决以下问题:

注意我是编程和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/>";

}
?>

这可以打印出来:

  

科幻小说

     

剧情

     

犯罪

这是我跑到墙上的地方。当我尝试在

之后添加另一个foreach循环时
print $genre;

浏览器中没有显示任何结果(第一个循环的结果除外)。我尝试了一切。例如:

  • 首先使用应用于$ genre的array_value()函数,然后在返回的数组上尝试foreach。
  • 在教科书中还提到了一段时间(列表($ x)=($ y))机制。
  • 我彻底重新阅读了数组章节,并在其他地方寻找无济于事。

也许我错误地构造了多维数组?为了保持一致性,第二维数组是否也需要是关联数组?

6 个答案:

答案 0 :(得分: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>";
}
?>

答案 1 :(得分:0)

等待!你为什么这样做:

$gKeys = array_keys($genres);

这只会给你一个单独的数组。

首先在$ genres上循环,然后在里面:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您的外部数组是一个关联数组,其中 genres 为键。

要打印出该类型的电影(子阵列),请使用另一个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>";

答案 4 :(得分: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>"; 

答案 5 :(得分: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;