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/>";

}
?>

これは機能し、次のように出力されます。

SF

ドラマ

犯罪

ここで壁にぶち当たります。後に別の foreach ループを追加しようとすると

print $genre;

結果はブラウザーに表示されません (最初のループの結果を除く)。私はすべてを試しました。例えば:

  • $genre に適用された array_value() 関数を使用して開始し、返された配列に対して foreach を試行します。
  • 教科書には while (list($x) = ($y)) メカニズムも記載されています。
  • 私はアレイの章を徹底的に読み直しましたが、他の場所を見ても役に立ちませんでした。

おそらく、多次元配列の構造が間違っているのでしょうか? 一貫性のためにも、2 次元配列は連想配列である必要がありますか?

4

6 に答える 6

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;
于 2013-03-17T10:40:26.457 に答える
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 に答える