0

次の構造の配列があります。

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

1 つのアイテムの「font」値が「PT+Sans:400」であることがわかっているだけで、その 1 つのアイテムの「label」値を取得する必要があるとします。サブ配列を反復処理するよりも簡単にするにはどうすればよいですか?

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 に答える