2017-09-20 14 views
0

まず、配列検索関数の作成者のすべてのクレジット。私が必要とするのは、複数のキーを配列でフィルタリングすることです。現在の機能は、検索1キーと1回の使用当たりの値に限定されていました。多次元配列の動的な複数の検索フィルタphp

$arr = array(0 => array(id=>1,name=>"cat 1"), 
     1 => array(id=>2,name=>"cat 2"), 
     2 => array(id=>3,name=>"cat 1") 
); 

以下が関数である(所有者にクレジット):

​​

私は($ arrが、 '名前'、 '猫1')の検索を使用している場合は、それが返されます:

array(0 => array(id=>1,name=>"cat 1"), 
    1 => array(id=>3,name=>"cat 1") 
); 
私はそれが名前 '=> '猫1' と 'ID'=> 1でフィルタリングする場合

しかし、それだけで返します。

array(0 => array(id=>1,name=>"cat 1") 
); 

しかし、私はさまざまな多次元配列上でそれを使用するために、受け入れ動的フィルタパラメータで関数が必要です。どんな助力も深く感謝します。

編集:私は今のところ

public function search($array, $search) 
{ 
    $results = array(); 
    foreach($search as $key => $value){ 
     $condition[] = 'isset($subarray["'.$key.'"]) && $subarray["'.$key.'"] == "'.$value.'"'; 
    } 

    $filter = implode($condition, ' && '); 

    foreach($array as $subarray){ 
     if ($filter) { 
      $results[] = $subarray; 
     } 
    } 

    return $results; 
} 

を試してみました。しかし、私はPHPコードとして$フィルタを実行することはできませんどのような

。助けてください!

答えて

0

は、最も最適化されたソリューションが、あなたはarray_intersect_assocとの組み合わせでarray_filterを使用することができます。ここでは

function search(array $array, array $search) 
{ 
    return array_filter($array, function ($item) use ($search) { 
     return array_intersect_assoc($search, $item) === $search; 
    }); 
} 

working demoです。