поиск ассоциативного массива по значению

Я извлекаю JSON из API flickrs. Моя проблема в том, что данные exif находятся в другом порядке в зависимости от камеры. Поэтому я не могу жестко закодировать номер массива, например, модель камеры. Есть ли у PHP какие-либо встроенные методы для поиска по значениям ассоциативного массива и возврата соответствующих массивов? В моем примере ниже я хотел бы найти [label] => Model и получить [_content] => NIKON D5100 .

Пожалуйста, дайте мне знать, если вы хотите, чтобы я уточнил.

 print_r($exif['photo']['exif']); 

Результат:

 Array ( [0] => Array ( [tagspace] => IFD0 [tagspaceid] => 0 [tag] => Make [label] => Make [raw] => Array ( [_content] => NIKON CORPORATION ) ) [1] => Array ( [tagspace] => IFD0 [tagspaceid] => 0 [tag] => Model [label] => Model [raw] => Array ( [_content] => NIKON D5100 ) ) [2] => Array ( [tagspace] => IFD0 [tagspaceid] => 0 [tag] => XResolution [label] => X-Resolution [raw] => Array ( [_content] => 240 ) [clean] => Array ( [_content] => 240 dpi ) ) 

Насколько мне известно, такой функции нет. Существует array_search , но он не совсем делает то, что вы хотите.

Я думаю, что самый простой способ – написать цикл самостоятельно.

 function search_exif($exif, $field) { foreach ($exif as $data) { if ($data['label'] == $field) return $data['raw']['_content']; } } $camera = search_exif($exif['photo']['exif'], 'model'); 
 $key = array_search('model', array_column($data, 'label')); 

В новейшем PHP функция выше будет работать.

array_search ('Model', array_map (функция ($ data) {return $ data ['label'];}, $ exif))

Это было бы довольно тривиально:

 $model = ''; foreach ($exif['photo']['exif'] as $data) { if ($data['label'] == 'Model') { $model = $data['raw']['_content']; break; } } 
 foreach($exif['photo']['exif'] as $row) { foreach ($row as $k => $v) { if ($k == "label" AND $v == "Model") $needle[] = $row["raw"]; } } print_r($needle); 

Насколько я знаю, PHP не имеет встроенной функции поиска для многомерного массива. Он имеет только для индексированного и ассоциативного массива. Поэтому вам нужно написать свою собственную функцию поиска!