2017-09-08 9 views
0

私のPHP開発者としての私の毎日の仕事では、ここで自分自身が&の配列を再度処理していることに気付きました。php>配列処理:オブジェクト指向の良いライブラリですか?

は、与えられた:プロセスの

$array1; // array to process 
$keysToKeep   = ['k1', 'k2', 'k3']; 
$keysToTranslate = ['k1' => 'hello1']; 
$keysToLower  = ['k2', 'k3']; 

典型的な例は次のとおりです。

$arrayProcessed = owArray::getInstance($array1) 
->keepKeys($keysToKeep) 
->renameKeys($keysToTranslate) 
->map($keysToLower, 'strtolower') 
; 

でき、誰ポイント:

$arrayProcessed = []; 
foreach ($array1 as $k => $v) { 
    if (array_key_exists($k, $keysToKeep) { 
     $arrayProcessed[$k] = $v; 
    } 
    if (isset($keysToTranslate[$k])) { 
     $arrayProcessed[$keysToTranslate[$k]] = $v; 
     unset($arrayProcessed[$k]); 
    } 
} 
foreach ($keysToLower AS $k) { 
    if ($array_key_exists($k, $arrayProcessed)) { 
     $arrayProcessed[$k] = strtolower($array1[$k]); 
    } 
} 

私は私が代わりにこれを書き込むことができるようになるAPIの夢私はその方向に向かう図書館に行きますか?任意のヒントを事前に

Thxを;-)

+0

あなたのためにこれを行う関数やクラスを作るのはあまりにも難しいとは思いません。 – GrumpyCrouton

答えて

0

Laravelは素晴らしいCollectionsを持っています。あなたがやろうとしているか、それらを使用すると、次のように書くことができます。

$array = [ 
    'k1' => 'Foo', 
    'k2' => 'Bar', 
    'k3' => 'Baz', 
    'k4' => 'quux', 
    'k5' => 'quuuux' 
]; 

$keysToKeep   = ['k1', 'k2', 'k3']; 
$keysToTranslate = ['k1' => 'Hello1']; 
$keysToLower  = ['k2', 'k3']; 

$result = collect($array) 
    ->only($keysToKeep) 
    ->merge($keysToTranslate) 
    ->pipe(function ($array) use ($keysToLower) { 
     return $array->merge(
      $array->only($keysToLower)->map(function ($value) { 
       return strtolower($value); 
      }) 
     ); 
    }) 
    ->toArray(); 

結果は次のようになります。

array(3) { 
    ["k1"]=> 
    string(6) "Hello1" 
    ["k2"]=> 
    string(3) "bar" 
    ["k3"]=> 
    string(3) "baz" 
} 

そして、私は($keysToLowerに関する)最後の部分はさらに短く書くことができ、ほぼ確信しています。

書籍とコースがあります"Refactoring to Collections"によってAdam Wathanです。彼らは無料ではありませんが、チェックアウトする価値があるかもしれません。

+0

Thx Sevavietl。面白いAPI。驚くようなインスタンス化:「新規」も静的な呼び出しもありません。私は関数がオブジェクトを返すと思います... – ffrey

+1

@ffrey、はい、それは 'Illuminate \ Support \ Collection'のインスタンスを返す単なるラッパーです。 – sevavietl

関連する問題