31

flickrs API から JSON を取得しています。私の問題は、カメラによって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
                )

        )
4

8 に答える 8

69
$key = array_search('model', array_column($data, 'label'));

PHP の最近のバージョン、具体的には PHP 5 >= 5.5.0 では、上記の関数が機能します。

于 2015-07-22T04:31:18.920 に答える
23

私の知る限り、そのような機能はありません。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');
于 2012-09-11T20:02:02.503 に答える
5

これを実装するのはかなり簡単です。

$model = '';

foreach ($exif['photo']['exif'] as $data) {
    if ($data['label'] == 'Model') {
        $model = $data['raw']['_content'];
        break;
    }
}
于 2012-09-11T20:01:06.587 に答える
2
foreach($exif['photo']['exif'] as $row) {
    foreach ($row as $k => $v) {
        if ($k == "label" AND $v == "Model")
            $needle[] = $row["raw"];
    }
}
print_r($needle);
于 2012-09-11T20:01:58.663 に答える
1

次の関数は、連想配列内で文字列値と他の配列内の値の両方を検索します。たとえば、次の配列があるとします。

 $array= [  "one" => ["a","b"],
            "two" => "c" ];

次の関数は、a、b、および c の両方を見つけることもできます

 function search_assoc($value, $array){
         $result = false;
         foreach ( $array as $el){
             if (!is_array($el)){
                 $result = $result||($el==$value);
             }
             else if (in_array($value,$el))
                 $result= $result||true;
             else $result= $result||false;
         }
         return $result;
     }
于 2019-03-01T20:41:52.693 に答える
0

私の知る限り、PHP には多次元配列の検索機能が組み込まれていません。インデックス付きの連想配列のみがあります。したがって、独自の検索機能を作成する必要があります!!

于 2012-09-11T20:02:38.243 に答える