迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【laravel】多次元配列と連想配列の使い方

個人アプリ作成の中で使った、多次元配列と連想配列についてメモしておきます。

 

以下のリンク先をベースに実装しています。

【PHP入門】多次元配列・連想配列の使い方と便利な関数を解説! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

 

 

連想配列とは

キーに対応する値を設定できます。例では「案件数がもっとも多い言語は何か」というキーに対して、「Java」という値を設定しています。

 

また、値を参照するときはキーを指定します。

 

  $data = [
    '案件数がもっとも多い言語は何か' => 'Java',
  ];
  echo "<pre>";
  print_r($data);
  echo "</pre>";

  echo $data['案件数がもっとも多い言語は何か'];

 

結果

Array ( [案件数がもっとも多い言語は何か] => Java ) Java

 

多次元配列について

配列の中に配列を配置したものになります。今回は例は、連想配列の「値」を「配列」にしています。

配列の場合、アクセスするためのキーが自動で数字が割り当てられます。

 

例では「案件数がもっとも多い言語は何か」というキーに対して、4つの値をもつ配列を設定しています。

 

値にアクセスするときは「キー」を設定するのですが、配列側のいくつ目の値であるかも指定します。

 

$data = [
      '案件数がもっとも多い言語は何か' => ['C','PHP','Java','Ruby'],
  ];
  echo "<pre>";
  print_r($data);
  echo "</pre>";

  echo $data['案件数がもっとも多い言語は何か'][2];

 

Array
(
    [案件数がもっとも多い言語は何か] => Array
        (
            [0] => C
            [1] => PHP
            [2] => Java
            [3] => Ruby
        )
)
Java

 

さらに多次元化する

今回の個人アプリではさらに多次元化して利用しています。

 

「案件数がもっとも多い言語は何か」というキーに対して、4つの配列をもつ配列を設定しています。

 

うーん、言葉にするとわかりにくい。具体的には以下を見てください。

 

$data2 = [
    '案件数がもっとも多い言語は何か' => [[1,1,'C'],[1,2,'PHP'],[1,3,'Java'],[1,4,'Ruby']],
  ];
  echo "<pre>";
  print_r($data2);
  echo "</pre>";

  echo '問題番号:' . $data2['案件数がもっとも多い言語は何か'][2][0] . '<br />';
  echo '回答番号:' . $data2['案件数がもっとも多い言語は何か'][2][1] . '<br />';
  echo '回答内容:' . $data2['案件数がもっとも多い言語は何か'][2][2] . '<br />';

 

Array
(
    [案件数がもっとも多い言語は何か] => Array
        (
            [0] => Array
                (
                    [0] => 1
                    [1] => 1
                    [2] => C
                )

            [1] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => PHP
                )

            [2] => Array
                (
                    [0] => 1
                    [1] => 3
                    [2] => Java
                )

            [3] => Array
                (
                    [0] => 1
                    [1] => 4
                    [2] => Ruby
                )
        )
)
問題番号:1
回答番号:3
回答内容:Java

 

回答内容だけでなく、問題番号と回答番号も値に設定しています。

データへのアクセスは、[キー][1つ目の配列の順番][2つ目の配列の順番]と指定します。

 

今回このような複雑な配列を使ったのには理由があります。

 

  • foreach文で画面に表示させるときに便利だから
  • 回答結果をDBに登録するために、問題番号と回答番号が必要だったから

 

詳しくは次の記事で書こうと思います。

 

あとがき

もっとスマートにやる方法を模索中。