0

我有以下结构的数组:

$some_array = array(
    array(
        'font' => 'Arial',
        'label' => 'Arial'
    ),
    array(
        'font' => 'PT+Sans:400',
        'label' => 'PT Sans'
    )
);

假设我只知道一个项目的“字体”值为“PT+Sans:400”,我需要检索该项目的“标签”值。我怎样才能比遍历子数组更容易呢?

4

3 回答 3

2

您需要遍历子数组。或者,如果您可以控制存储它的数据结构,请考虑使用哈希表(关联数组),然后您可以检查是否设置了特定键。

于 2012-11-03T21:07:45.267 回答
2

把事情简单化:

function findLabel($source, $font) 
{
    foreach ($source as $item) {
        if ($item['font'] == $font) {
            return $label;
        }
    }

    return null;    
}

用法:

$label = findLabel($some_array, 'PT+Sans:400');    
于 2012-11-03T21:09:58.150 回答
2

由于您已经在使用foreach您只想要其他替代品,那么您可以考虑这个解决方案

解决方案 1

您可以尝试使用过滤您的搜索array_filter

$search = "PT+Sans:400" ;
$array = array_filter($array,function($v)use($search){ return $v['font'] == $search;});
var_dump($array); // returns all found array 

输出

array
  1 => 
    array
      'font' => string 'PT+Sans:400' (length=11)
      'label' => string 'PT Sans' (length=7)

如果您只需要标签

$find = array_shift($array); // take only the first
print($find['label']);  // output the label 

输出

PT Sans

解决方案 2

如果您对返回数组不感兴趣,而您想要的只是标签,那么您应该考虑array_reduce

$search = "PT+Sans:400" ;
$results = array_reduce($array,function($a,$b)use($search){ return $b['font'] == $search ? $b['label'] : null ; });
print($results);

输出

PT Sans  
于 2012-11-03T21:24:08.720 回答