PHP 多次元配列の値による検索
配列があり、uid
を検索して、その配列のキーを取得したい。
例
以下のような2次元の配列があるとします。
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
関数コール search_by_uid(100)
(最初のユーザのuid) は 0
を返すはずです。
関数コール search_by_uid(40489)
は 2
を返します。
ループを作ってみましたが、より速く実行できるコードが欲しいです。
291
3
これで動作します。こんな感じで呼んでください。
この例では、
string
を検索するか、===
の代わりに==
を使用しなければなりません。angoru]1**の回答に基づいています。PHPの後期バージョン(
>= 5.5.0
)では、ワンライナーを使用することができます。ここにドキュメントがあります: http://php.net/manual/en/function.array-column.php.
Jakub'さんの素晴らしい回答を参考に、キーを指定できる(uidに限らない)、より一般的な検索方法を紹介します。
使い方です。
$results = searcharray('searchvalue', searchkey, $array);
これはすでに回答されていると思いますが、私はこれを使用して、コードでもう少し拡張して、uidだけで検索しないようにしました。この機能を必要としている人のために共有したいと思います。
以下は私の例ですが、これは私の最初の回答であることをご了承ください。特定の配列だけを検索する必要があったので、param配列を取り除きましたが、簡単に追加することができます。私は基本的にuid以外のもので検索したかったのです。
また、私の状況では、ユニークではない他のフィールドで検索した結果、複数のキーが返される可能性があります。
その後、私は結局、別の値と連想キーを検索できるようにするためにこれを書きました。つまり、最初の例では、任意の特定の連想キーで値を検索し、マッチしたものをすべて返すことができます。
2つ目の例では、ある値('Taylor')が特定の連想キー(first_name)で見つかり、**別の値(true)が別の連想キー(employed)で見つかり、すべてのマッチ(first nameが 'Taylor' ANDの人がemployedであるキー)を返すことができます。
関数の使用法について
結果