2016-12-13 8 views
0

は、私が持っている:素晴らしい作品が、私はショートバージョンまたは同じことを行う関数に建てがあれば疑問に思ったままにしていますPHP REINDEXアレイ法

foreach($filters as $key => $filter) { 
     $filters[$filter['field']] = [ 
      'operator' => $filter['operator'], 
      'value' => $filter['value'] 
     ]; 
     unset($filters[$key]); 
    } 

+1

もしあれば - 私はこれが最速の方法だと思います。 – jitendrapurohit

+0

まあ、array_map()で手動ループを取り除くことができます。 –

+6

$ filter ['field']が$ keyと同じであればどうなるか考えましたか? 現在ループしているアレイを変更すると危険です。必要に応じて、$ filtersをリセットする前に、一時配列に書き込むことをお勧めします – SimonMayer

答えて

0

あなたはarray_columnと一緒array_combineを使用することができます。これは、アレイ内の'field'要素を残す

$result = array_combine(
    array_column($filters, 'field'), 
    $filters 
); 

。あなたはそれを削除したい場合は、array_map使用することができます簡単にするために

$result = array_combine(
    array_column($filters, 'field'), 
    array_map(function ($filter) { 
     return [ 
      'operator' => $filter['operator'], 
      'value' => $filter['value'] 
     ]; 
    }, $filters) 
); 

を私は直接キーにアクセスしますが、生産には、常にこのキーが配列内に存在するかどうかを確認する必要があります。