phpで多次元配列を作成した際に、欲しい情報を取得する方法の記録。
オブジェクトの例
$books = array(
array('title'=>'黒パン雨やどり', 'writer'=>"石森 伸一", 'price'=>1000),
array('title'=>'ベティさんの長恨歌', 'writer'=>"一ノ倉 敬太郎",'price'=>500),
array('title'=>'パークきれぎれ', 'writer'=>"梶 芳美", 'price'=>800),
array('title'=>'月と満ち欠け', 'writer'=>"弓田 沙和", 'price'=>900),
);
多次元配列から取得したい情報
-
任意のkeyのみ取得
例)titleのみ取得 -
任意の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