1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

phpの多次元配列の扱い

Posted at

phpで多次元配列を作成した際に、欲しい情報を取得する方法の記録。

オブジェクトの例


$books = array(
    array('title'=>'黒パン雨やどり', 'writer'=>"石森 伸一", 'price'=>1000),
    array('title'=>'ベティさんの長恨歌', 'writer'=>"一ノ倉 敬太郎",'price'=>500),
    array('title'=>'パークきれぎれ', 'writer'=>"梶 芳美", 'price'=>800),
    array('title'=>'月と満ち欠け', 'writer'=>"弓田 沙和", 'price'=>900),
);

多次元配列から取得したい情報

  1. 任意のkeyのみ取得
    例)titleのみ取得

  2. 任意のkeyに特定の値が存在するか
    例)nameに山田太郎が存在するか

方法

1. 任意のkeyのみ取得

array_column使うと一発でできて感動

array_column($books, "title")
/*
Array
(
    [0] => 黒パン雨やどり
    [1] => ベティさんの長恨歌
    [2] => パークきれぎれ
    [3] => 月と満ち欠け
)
*/

//第三引数を追加すると、第三引数をindexとした配列が出力される
array_column($books, "title", 'price')
/*
Array
(
    [黒パン雨やどり] => 1000
    [ベティさんの長恨歌] => 500
    [パークきれぎれ] => 800
    [月と満ち欠け] => 900
)
*/

2. 特定のvalueに関して条件を満たすもののみ取得

例)nameに山田太郎が存在するか
array_column()とarray_search() or in_array()を組み合わせる

array_search()の利用方法↓

  • 第一引数:検索したい文字列
  • 第二引数:検索対象の配列
  • 第三引数:厳密な一致判定を行うか(True/False)
  • 返り値:最初にヒットしたindex

in_array()はTrue/Falseを返す.

in_array('月と満ち欠け', array_column($books, 'title'));      // 1(True)
array_search('月と満ち欠け', array_column($books, 'title'));  //  3

また,array_seatchでは第二引数を連想配列にしても大丈夫で,その場合
検索対象:連想配列のvalue
返り値:ヒットした連想配列のkeyを返す

array_searchとin_arrayどちらがよいか?

多次元配列に特定の値が含まれるか判定したい場合はin_array()

  • 理由1:array_searchの場合indexを返すので,先頭に検索対象があった場合0を返す。値が存在しない場合はnullを返す。phpはnullと0は同じように扱われて面倒(正確には違う)で、間違いも起きやすいのでin_arrayが良い
  • 理由2:実行速度があまり変わらない

参考

https://www.php.net/manual/ja/function.array-column.php
https://1-notes.com/php-array-search/
https://kinocolog.com/php_array_search/
https://www.php.net/manual/ja/function.array-search.php

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?