0

私の初期配列は

$employees = array(
array('name' => 'jack',
      'area' => 'crafts'),

array('name' => 'janet',
      'area' => 'aquatics'),

array('name' => 'brad',
      'area' => 'crafts')
);

別の配列の検索結果に基づいて新しい配列を作成しようとしているので、「工芸品」を検索すると、新しい配列は次のようになります。

$employees2 = array(
array('name' => 'jack',
      'area' => 'crafts'),

array('name' => 'brad',
      'area' => 'crafts')
);

この新しい結果を得るために私ができる最も簡単な解決策は何ですか。

4

5 に答える 5

1
foreach($employees as $key => $value){

    if($value['area']=='crafts'){
        $employees2[] = $value;
    }

}

これは非常に単純に最初の配列をループし、内部配列の「area」の値をチェックします。値が「crafts」と等しい場合、それを $employees2 という新しい配列に入れることができます。キーをカスタマイズしたい場合は、クラフトを好きなものに変更したり、employees2 の [ ] の間に好きなものを追加したりできます。

于 2013-02-25T19:59:45.670 に答える
0

これを試して:

$employees = array(
array('name' => 'jack',
  'area' => 'crafts'),

array('name' => 'janet',
  'area' => 'aquatics'),

array('name' => 'brad',
  'area' => 'crafts')
);

$employees2 = array();

foreach ($employees as $key) {
if($key['name'] == "jack")
{
    array_push($employees2,array('name'=>$key['name'],'area'=>$key['area']));
}
}

var_dump($employees2);

array_push はすべてのトリックを行います;)

サルドス。

于 2013-02-25T19:58:46.860 に答える
0

これを試して :

$employees = array(
array('name' => 'jack',
  'area' => 'crafts'),
array('name' => 'janet',
  'area' => 'aquatics'),
array('name' => 'brad',
  'area' => 'crafts')
);

$employees       = array_filter($employees, function($employee) {
   return ($employee['area'] == 'crafts' );
});
echo "<pre>";
print_r($employees);
于 2013-02-26T05:04:39.417 に答える
0

可能な結果セットが大きくなる可能性があると想定します。その場合、余分なメモリをできるだけ少なくして配列を処理する必要があります。このため、参照によって配列を反復処理し、基準に一致しない項目の設定を解除することをお勧めします。フィルターに一致するアイテムを格納するために新しい配列を作成するよりも、オーバーヘッドが少ない可能性があります。次に、配列が空であるかどうかを確認して、フィルターが結果を返すかどうかを判断できます。そのようです:

<?php
// maybe this will be set through an option from the UI
$area_filter = 'crafts';

// fetched results
$employees = array(
    array('name' => 'jack',
          'area' => 'crafts'),

    array('name' => 'janet',
          'area' => 'aquatics'),

    array('name' => 'brad',
          'area' => 'crafts')
);

// filter out the items that match your filter
foreach($employees as $i => &$employee){
    if($employee['area'] != $area_filter){
        unset($employees[$i]);
    }
}

// do something with the results
if(!empty($employees)){
    print_r($employees);
} else {
    echo "Sorry, your filter '$area_filter' did not match any results\n";
}
?>
于 2013-02-25T20:10:55.350 に答える
0

ユーティリティ ベルト ライブラリの Underscore.php ( http://brianhaveri.github.com/Underscore.php/ )を使用して、構文を単純化できます (ただし、アルゴリズムの複雑さは単純化できません)。

ループを記述する必要をなくす配列の「抜き取り」方法がいくつかありますが、ボンネットの下では、上記の回答で説明したのとほとんど同じことを行います。

于 2013-02-25T20:05:52.277 に答える