0

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

注意我是编程和 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。
  • 教科书中还提到了while (list($x) = ($y)) 机制。
  • 我彻底重新阅读了数组章节,并在其他地方寻找无济于事。

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

4

6 回答 6

1

您的数组结构正确。您使用了错误的数组(仅包含键的数组)并在之后添加了另一个 foreach 循环,print $genre;因此它不起作用。

不,第二维数组也不需要是关联数组。

<?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>";
}
?>
于 2013-03-17T10:26:31.777 回答
0

等待!你为什么这样做:

$gKeys = array_keys($genres);

这只是给你一个单一的键数组。

在 $genres 上做你的第一个循环,然后在里面:

foreach ($genre as $key=>$subgenre)
{
   //do stuff here
}
于 2013-03-17T10:24:25.573 回答
0
foreach ($genres as $genrekey => $genrevalue) {
  print $genrekey."<br/>";
  foreach ($genrevalue as $value) {
    print $value."<br/>";
  }
}
于 2013-03-17T10:25:46.433 回答
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>";
于 2013-03-17T10:28:30.690 回答
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>"; 
于 2013-03-17T10:30:14.600 回答
0

如果您需要它来查看数组中的数据以进行调试,您可以使用 PHPs 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;
于 2013-03-17T10:40:26.457 回答