我从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
)
)
答案 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;}