按值搜索关联数组

时间:2012-09-11 19:58:16

标签: php

我从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
                )

        )

8 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:16)

据我所知,没有这样的功能。有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');

答案 2 :(得分:13)

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

答案 3 :(得分:4)

实施这一点非常简单:

$model = '';

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

答案 4 :(得分:2)

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

答案 5 :(得分: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;
     }

答案 6 :(得分:0)

据我所知,PHP没有多维数组的内置搜索功能。它仅用于索引和关联数组。因此,你必须编写自己的搜索功能!!

答案 7 :(得分:0)

$data = [
["name"=>"mostafa","email"=>"mostafa@gmail.com"],
["name"=>"ali","email"=>"ali@gmail.com"],
["name"=>"nader","email"=>"nader@gmail.com"]];

chekFromItem($data,"ali");

function chekFromItem($items,$keyToSearch)
{
$check = false;
foreach($items as $item)
{
    foreach($item as $key)
    {
        if($key == $keyToSearch)
        {
            $check = true;
        }
    }

    if($check == true)
    {break;}
}
return $check;}