2

如果有以下形式的相当大的多维数组(flickr EXIF 数据)。

array(
(int) 81 => array(
    'tagspace' => 'Nikon',
    'tagspaceid' => (int) 0,
    'tag' => 'ISOExpansion2',
    'label' => 'ISOExpansion2',
    'raw' => 'Off'
),
(int) 82 => array(
    'tagspace' => 'Nikon',
    'tagspaceid' => (int) 0,
    'tag' => 'LensType',
    'label' => 'Lens Type',
    'raw' => 'G'
),
(int) 83 => array(
    'tagspace' => 'Nikon',
    'tagspaceid' => (int) 0,
    'tag' => 'Lens',
    'label' => 'Lens',
    'raw' => '11-16mm f/2.8'
),...
)

是否有一种快速有效的方法来提取具有某些值的数组,即我会寻找键“Tag”的值“Lens”并获取一个数组作为返回值:

array(
    'tagspace' => 'Nikon',
    'tagspaceid' => (int) 0,
    'tag' => 'Lens',
    'label' => 'Lens',
    'raw' => '11-16mm f/2.8'
)

另外,这可以使用 Set 完成吗?我只通过使用实现了以下目标$extract = Set::classicExtract($exifarray, '{n}.tag')

array(
      (int) 81 => 'ISOExpansion2',
      (int) 82 => 'LensType',
      (int) 83 => 'Lens',...
)
4

1 回答 1

1

Set::classicExtract($exifarray, '{n}.tag');如您所见,将提取所有标签。

Set::matches ( CakeBook 链接) 用于查看单个项目或给定 xpath 是否匹配某些条件。但是我不确定这是否适用于 strings,但应该。因此,如果您已经完成:

$data = Set::classicExtract($exifarray, '{n}.tag');

你可以试试:

foreach($data as $key => $test){
    if(Set:matches(array('0=Lens'), $test[$key])){
    //Logic to run when you have a match.
    }
}

如果这不起作用,您将不得不以相同的“foreach”方式对其进行正则表达式匹配,顺便说一句,这可能是正确的做法。

还有一点注意: 现在不推荐使用Set (从 Cake 2.2 开始)。有一个新的更好的数组操作类——Hash。看看这个。

于 2012-07-05T07:33:05.937 回答