元ニート中卒派遣30代ブサメン童貞のブログ

みんなが存在に疑問を感じている「元ニート、中卒、派遣、30歳超えのブサメン童貞」が実際に生息し、そして「どうやって生きてるか」を晒していくブログ

人生初のプログラム完成!

多次元配列のforeach

さて、ここからが難題です。配列の中に配列が入っているものを「多次元配列」というらしいですが、初心者にとって配列は最初にして最大の難関です。if()while()はなんとなく感覚で理解できますが、foreach()はそうはいきません。突然の$key$valueに目が点。やっとのことで取り出した値の中に、さらに配列が入っているとか正気の沙汰とは思えません。悪魔の所業か。

結論としては、foreach()入れ子にして書いていきます。もっとスマートなやり方があるのかもしれませんが、ググっても出てこなかったし、逆にいろんなページで「ネストを深くするな」とゲシュタルト崩壊するくらい書かれていたことが、「あ、そういうもんなのね」という説得力を強固にさせます。

<?php
if (isset($res_json['word_list'])) {
  foreach ((array)$res_json['word_list'] as $key1 => $value1) {
    foreach ($value1 as $key2 => $value2) {
      $value = implode(":", $value2);
      echo " [" .$value ."] ";
    }
  }
}

まずはNoticeエラー回避のために、isset()で変数のセット確認とNULLチェックをします。セットされていればtrueなので、そうしたらforeach()の出番です。(array)foreach()に与えられた配列のセット確認とNULLチェック。またかよ。不要な気もしますが、外すとエラーが出るので書くことにしました。

あとは、foreach()の多次元配列でよく見るパターン。取り出した値を整形するため、implode()で配列要素を文字列で連結しています。今後のことを考えると、ここで中途半端に連結させずにいたほうが拡張性は高いと思いますが、とりあえずは出力結果を優先させます。

値を取得する

APIのDocumentationにもあったような「日本語を分析します」という文章を形態素解析させると、以下のように出力されるはずです。ドキドキ……。

[日本語:名詞:ニホンゴ] [を:格助詞:ヲ] [分析:名詞:ブンセキ] [し:動詞活用語尾:シ] [ます:動詞接尾辞:マス]

わーい、やったー!動いたー!!なんかよくわかんないけど動いてるみたいだー!!!30年以上も意味なく生きてきて、ようやく人生初プログラムの完成です。こ、これが「くりえいたぁ」というやつなのか!?ここまで到達するのに何回のvar_dump()が必要だっただろうか。困ったらvar_dump()、これ豆な。

次は、これをいい感じにHTMLの中に組み込んでいきます。