イテレータを使用する方が「手動」で実行するよりも速いかどうかはわかりませんが、RecursiveArrayIteratorを使用できます-http ://php.net/manual/en/class.recursivearrayiterator.php
$arr = array(
array('id' => 1, 'par' => 5),
array('id' => 2, 'par' => 5),
array('id' => 3, 'par' => 5),
array('id' => 4, 'par' => 7),
array('id' => 5, 'par' => 7),
array('id' => 6, 'par' => 7),
array('id' => 7, 'par' => 9),
array('id' => 8, 'par' => 9),
);
$arrayIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach ($arrayIterator as $subKey=>$subValue) {
if ($subKey == 'par' && $subValue == 9) {
$validArray = iterator_to_array($arrayIterator->getSubIterator());
$id = $validArray['id']; // This is your return array
break;
}
}
しかし、正直に言うと、手作業で行う方がおそらく理解とデバッグがはるかに簡単であり、2000レコードの場合、次のような複雑なものに煩わされるのはなぜですか。
foreach($arr as $subArray) {
if ($subArray['par'] == 9) {
$id = $subArray['id'];
break;
}
}
より多くのレコードを処理している場合、またはFacebookの人気があった場合は、真剣になり始めます。しかし、時にはそれをシンプルに保つことが最善の方法です。