💬

PHPで連想配列から特定の値があるかどうか判定する

1 min read

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でも成立してしまう'