CakePHP 2.1:使用Set来搜索值

时间:2012-07-04 08:38:55

标签: cakephp search set cakephp-2.1

如果有一个相当大的以下形式的多维数组(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',...
)

1 个答案:

答案 0 :(得分:1)

Set::classicExtract($exifarray, '{n}.tag');会提取您已经看过的所有代码。

Set::matchesCakeBook link)用于查看单个商品或给定的xpath是否符合特定条件。 但是我不确定这是否适用于字符串,但应该如此。 所以如果你做了:

$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"上进行RegEx匹配。顺便说一下,在这里做正确的时尚。

并注意一点: Set现已弃用(自Cake 2.2起)。有一个新的更好的数组操作类 - Hash。看看吧。