按值搜索关联数组

Joh*_*han 22 php

我从flickrs API中获取了一些JSON.我的问题是exif数据的顺序不同,具体取决于相机.所以我不能硬编码数组来获得,例如,下面的相机模型.PHP是否有任何内置方法来搜索关联数组值并返回匹配数组?在我下面的例子中,我想搜索[label] => Model并获取[_content] => NIKON D5100.

如果您要我详细说明,请告诉我.

print_r($exif['photo']['exif']);
Run Code Online (Sandbox Code Playgroud)

结果:

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
                )

        )
Run Code Online (Sandbox Code Playgroud)

小智 46

$key = array_search('model', array_column($data, 'label'));
Run Code Online (Sandbox Code Playgroud)

在更新版本的PHP中,特别是PHP 5> = 5.5.0,上面的函数将起作用.


Gol*_*rol 17

据我所知,没有这样的功能.有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');
Run Code Online (Sandbox Code Playgroud)

  • 感谢通用解决方案:-) (2认同)
  • @Johan.实际上,当使用多种编程语言时,有时会混淆它们.:) (2认同)

mol*_*ins 14

array_search('Model',array_map(function($ data){return $ data ['label'];},$ exif))

  • 我比这里列出的其他方法更喜欢这种方法!它是真正的 PHP,而且比传统的 foreach 方法要快很多。有人对此进行基准测试! (3认同)
  • 您可以在代码中添加一些解释,以便其他人可以从中学习吗? (2认同)

Sea*_*ght 5

实现起来相当简单:

$model = '';

foreach ($exif['photo']['exif'] as $data) {
    if ($data['label'] == 'Model') {
        $model = $data['raw']['_content'];
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)