Я извлекаю 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 не имеет встроенной функции поиска для многомерного массива. Он имеет только для индексированного и ассоциативного массива. Поэтому вам нужно написать свою собственную функцию поиска!