31

我正在从 flickrs API 获取一些 JSON。我的问题是 exif 数据的顺序因相机而异。所以我不能硬编码一个数组编号来获取例如下面的相机型号。PHP 是否有任何内置方法来搜索关联数组值并返回匹配的数组?在下面的示例中,我想搜索[label] => Modeland get [_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 回答
17

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

array_map() 函数将数组的每个值发送到用户创建的函数,并返回一个包含新值的数组,由用户创建的函数给出。在这种情况下,我们将返回标签。

array_search() 函数在数组中搜索值并返回键。(在这种情况下,我们正在从 array_map 返回的数组中搜索标签值“Model”)

于 2014-12-09T19:21:16.557 回答
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 回答
1
$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;}
于 2021-04-19T01:42:42.027 回答
0

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

于 2012-09-11T20:02:38.243 回答