💬
PHPで連想配列から特定の値があるかどうか判定する
SELECTしてきた連想配列から、特定の値があるかを見つけたい時がある。
MySQLでLEFTJOINした場合や、フレームワークを使用した場合返り値が以下のようになることがある。
$users = [
[0] =>[
'id' => 1,
'name'=>'sample'
]
[1] =>[
'id' => 2,
'name'=>'taro'
]
[2] =>[
'id' => 3,
'name'=>'jiro'
]
配列から、特定の単語、例えば、「jiro」という値があるかどうかを判定する関数についての話。
連想配列を通常の配列に変換する
$result = array_column($users, 'name');
// => ['sample', 'taro', 'jiro']
array_columnは連想配列の特定のkeyの値のみを抜き出す関数。
配列から特定の値があるか判定する
$array = ['sample', 'taro', 'jiro'];
$key = array_search('jiro', $array);
// => 2
array_searchは配列の中に特定の値があるか判定し、返り値にその配列内のkeyを返す。
存在しないときはbooleanで返り値が戻る。
$array = ['sample', 'taro', 'jiro'];
$key = array_search('saburo', $array);
// => false
そのため存在判定で注意する点がある。
$array = ['sample', 'taro', 'jiro'];
$key = array_search('sample', $array);
// => 0
if(!$key) echo 'keyがゼロでもfalseでも成立してしまう'
//厳密な比較をするべき!
if($key === false) echo 'keyがゼロでもfalseでも成立してしまう'
Discussion