2017-07-16 3 views
0
$array_subjected_to_search =array(
    array(
      'name' => 'flash', 
      'type' => 'hero' 
    ), 

    array(
      'name' => 'zoom', 
      'type' => 'villian' 
    ), 

    array(
      'name' => 'snart', 
      'type' => 'antihero' 
    ), 
    array(
     'name' => 'flash', 
     'type' => 'camera' 
    ) 
); 
    $key = array_search('flash', array_column($array_subjected_to_search, 'name')); 
    var_dump($array_subjected_to_search[$key]); 

これはうまくいきますが、複数の値を使用して検索する方法があります。キーを得るname='flash' && type='camera'多値検索にarray_searchを使用する

答えて

4

には、複数の値を使用して検索する方法があります。キーを取得します。 name = 'flash' & & type = 'camera'?

$result_key = array_keys($array_subjected_to_search, [ 'type' => 'camera','name' => 'flash']); 
print_r($result); 

出力:array_keys機能を持つだけで

Array 
(
    [0] => 3 
) 
1

私はちょうど1つまたは2つのパラメータに基づいて必要な配列を取得するループを使用して自分の関数を作成すると思います。

function getValueMatch($array, $val1, $val2 = false, $type = 'name') 
    { 
     foreach($array as $key => $row) { 
      # See note below, but it might be handy to have a reversible key name 
      if($row[$type] == $val1) { 
       if($val2) { 
        # You can put a changeable key name to reverse-find 
        # It might be helpful to search for the other key first 
        # at some point, best to keep your options open! 
        $altVar = ($type == 'name')? 'type' : 'name'; 
        if($row[$altVar] == $val2) 
         return $row; 
       } 
       else 
        return $row; 
      } 
     } 
    } 

$array =array(
    array(
      'name' => 'flash', 
      'type' => 'hero' 
    ), 

    array(
      'name' => 'zoom', 
      'type' => 'villian' 
    ), 

    array(
      'name' => 'snart', 
      'type' => 'antihero' 
    ), 
    array(
     'name' => 'flash', 
     'type' => 'camera' 
    ) 
); 

print_r(getValueMatch($array,'flash','camera')); 

はあなたに与える:リバースマッチ(type代わりのname)の

Array 
(
    [name] => flash 
    [type] => camera 
) 

例:

print_r(getValueMatch($array,'antihero',false,'type')); 

はあなたを与える:

Array 
(
    [name] => snart 
    [type] => antihero 
) 
0

array_search機能以下は、あなたが提供するユースケースのために働くだろう、パラメータとして配列を受け入れます。

$array_subjected_to_search =array(
    array(
    'name' => 'flash', 
    'type' => 'hero' 
), 
    array(
    'name' => 'zoom', 
    'type' => 'villian' 
), 
    array(
    'name' => 'snart', 
    'type' => 'antihero' 
), 
    array(
    'name' => 'flash', 
    'type' => 'camera' 
) 
); 
$compare = array(
    'name'=>'flash', 
    'type'=>'camera' 
); 
$key = array_search($compare, $haystack); 
var_dump($haystack[$key]); 

注:現在の検索は正しく機能しません.Array_searchは0またはfalseを返すため、常にゼロインデックスを返します。

$key = array_search('flash', array_column($array_subjected_to_search, 'name')); 
var_dump($array_subjected_to_search[$key]); 
関連する問題