PHP

【PHP】2次元(多次元)配列でデータ取得したいならarray_columnがめっさ便利

アオキ
配列を制するものがPHPを制すっ・・!

と言ってもおかしくないくらい、『PHP』を扱う時には『配列(連想配列)』の出番が数多くあります。

『配列』ってこんな形で、

1つの変数の中に、たくさんのデータを入れられる仕組みです。

『連想配列』はこんな形。

キー(key)とバリュー(value)によって構成されています。

  • 名前 (キー) => 本田 (バリュー)
  • 年齢 (キー) => 6 (バリュー)
  • ポジション (キー) => MF (バリュー)

ですね。

こういった、シンプルな『配列(連想配列)』なら扱いやすいのですが、

実際には『配列』の中に『配列』が組み合わさったデータ構造を扱う事も多いです。

『多次元配列』『2次元配列』なんて言われたりします。

参考記事

Webページをつくっていると、

  1. フォームにデータ(配列)を入力する
  2. データベースに保存する

という流れがしょっちゅうでてきます。

アオキ
本当は保存する前にバリデーション(検証)も必要ですが今回ははしょります。

シンプルな『配列(連想配列)』ならわりと簡単なのですが、『多次元配列』の場合、

  1. フォームにデータ(配列)を入力する
  2. データベースに保存する

というだけではうまくいかない場合もよくあるんですよね。

なんせ、配列の中に配列が入ってくるので、

アオキ
いったいどのデータを保存すればいいんだい?

ってなっちゃうので。

なので、

  1. フォームにデータ(配列)を入力する
  2. データベースに保存する

の間に

受け取ったデータを保存したい順番に整形する

という手順を踏む必要があります。

  1. フォームにデータ(配列)を入力する
  2. 受け取ったデータを保存したい順番に整形する
  3. データベースに保存する

こうですね。

Sponsored link

PHP 多次元配列 フォーム編

今回作成したフォーム(イメージ)です。

編集画面を想定していて、

  • 選手名を変えられる
  • 表示順番を変えられる
  • 表示/非表示を切り替えられる
  • まとめて保存

というつくりになっています。

画面側のコードはこんな感じ( laravelで書いてますが普通のphpと大差ないかと (CSS周りははしょってます))

  • formタグで囲って
  • メソッドはPOSTで (フォーム保存のお約束)
  • アクション・・保存する処理を書いているファイル(今回はupdate)
  • foreachで選手名・表示順・表示/非表示を1つずつ表示

させています。

変更できる箇所はこんなコード。

name の値として name[] とカギカッコをつけているので『配列』になり、カギカッコの中に数字がはいってきます。

今回の場合、

ですね。

このフォームで更新ボタンを押すと、こんなデータ構造でデータが流れてきていました。

アオキ
データ構造は var_dump などで確認できます。

連想配列で、
1段目のキーがnameやsortNo、visible_flag、
キーに対するバリューの中に、また連想配列があるというつくりです。

データベースに保存する時は、

  • 名前・・大迫
  • 表示順・・1
  • 表示フラグ・・1

というように、選手ごとに保存させたいなと。

こういった、2段階の連想配列で便利なのが、『array_column』 という関数になります。

Sponsored link

PHP 多次元配列 保存処理編 array_column

『array_column』はPHP5.5.0から追加された関数で、

2次元配列や多次元配列で、特定の位置の値だけを配列で返せるという、

ややわかりづらい関数ではあるのですが、

ググっていると図解でとてもわかりやすいPHP配列関数一覧がありました。

図解でわかるPHP配列関数一覧
array_columnの説明はこれ。

で、他にもいくつかググって、できあがったコードが以下になります(こちらもlaravel想定です)。

正直もっとキレイな書き方がありそうな気もするんですが、
まずは意図通りデータ取得できたのでよしとすることに。

アオキ
最初はなかなかうまくいかなかったんですが、
アオキ
array_column関数が見つかってからは、あっさり解決しました、すごい
Sponsored link

PHPの2次元(多次元)配列ならarray_columnが使いやすいでっせ

フォームで1つずつ保存するならまだしも、

まとめて保存するとなったら、2次元(多次元)の配列を使うととても便利になる反面、

そのままデータ保存できない場合もでてくるので、

  1. フォームにデータ(配列)を入力する
  2. 受け取ったデータを保存したい順番に整形する
  3. データベースに保存する

という順番で、意図通りのデータに加工してから保存させる必要がでてきます。

今回は、『array_column』の他に、『array_keys』や『count』などの関数を使いましたが、

なんせPHPの配列関数は80(!?)近くあるようで、

うまく組み合わせて、いい感じでデータ取得できるようにしたいですね。

アオキ
Webページってとにかくデータ入力(出力)・データ保存の処理がたくさんでてくるので、
アオキ
配列を制するものがPHPを制すっ・・! ってのはあながち間違ってもないのかもなぁと思いますわ〜

残念ながらパーフェクトPHPは5.3.3想定なのでarray_columnは掲載されていないのですが、それでも超優良書だと思います。

created by Rinker
¥3,888 (2019/04/20 03:58:25時点 Amazon調べ-詳細)

『PHP(Laravel)』ではこんな記事も読まれています。

1. 【PHP】【laravel】CSVエクスポートの方法〜5つのポイント〜

2. 【PHP】オブジェクトと連想配列の違いについて調べてみた【初心者向け】

3. 【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

4. 【PHP】【図解】クラスと抽象クラスとインターフェースとトレイトとDIをまとめてみた【初心者向け】

5. 【PHP】配列や連想配列が覚えづらかったので学校に例えてみた【初心者向け】

6. 【PHP】ホームページに天気予報を表示させる方法【Webスクレイピング】【初心者向け】

7. 【Laravel5.5】Webアプリケーションを作るためのゆるめの環境構築編【Node.js】【npm】【Vue.js】【初心者向け】

8. 【PHP】2次元(多次元)配列でデータ取得したいならarray_columnがめっさ便利

  • コメント: 0

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


Sponsored link

関連記事

  1. PHP

    【PHP】オブジェクトと連想配列の違いについて調べてみた【初心者向け】

    ある程度『PHP』などのプログラミング言語をやっていると必ずといってい…

  2. Laravel

    【PHP】【laravel】CSVエクスポートの方法〜5つのポイント〜

    ちょっと前にPHPでCSVインポートをする方法を書きまして。今回…

  3. PHP

    【PHP】配列や連想配列が覚えづらかったので学校に例えてみた【初心者向け】

    ググって見ても配列のわかりやすい記事があまりなかったので、…

  4. PHP

    【PHP】ホームページに天気予報を表示させる方法【Webスクレイピング】【初心者向け】

    先日とある方よりいただいたご要望。確かに冬になれば、地域によっ…

  5. Laravel

    【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

    デスクワークの人なら誰もが知っていると思われる『CSVファイル』。…

Sponsored link

最近の記事

アーカイブ

Sponsored link
  1. Laravel

    【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【…
  2. クリエイティブコーディング

    プログラミングで数学も身につく 一石四鳥なクリエイティブコーディング
  3. 検索システム

    バリアフリーなホテル のページをオープンしました。
  4. 検索システム

    【検索システム】をつくってみた【実際にログインしてさわれます】
  5. HTML/CSS

    【厳選8冊】ホームページを作れるようになるためのおすすめ本【初心者向け】
PAGE TOP