2016-08-06 16 views
1

私はしばしばこのように構造が必要になります。クリーンな方法は、

$data = []; 
foreach($input as $entry) { 
    if(!isset($data[$entry->type])) { 
     $data[$entry->type] = 0; 
    } 
    $data[$entry->type] += $entry-value; 
} 

私は、これは信じられないほど醜いなく読むことは非常に簡単だと思います。どのようにこれを解決し、より流暢な/読みやすい/より速く入力する任意のアイデアですか?

私は通常、これらの種類の「問題」についてはあまり気にしませんが、これらの構造はかなり必要であり、それらを書いた後はいつも少し恥じます。この場合、より好適なのは、

+0

'$ entry-> type'が設定されていないとどうなりますか? – jonju

+0

私は通常、そのタイプが設定されていることを期待できます。しかし、それは本当に問題のポイントではありません。あなたは確かにそのケースを処理するコードを追加することができます。 – Moritur

答えて

0

これはnull合体演算子と7.0以降PHPに美しく行うことができますが存在しない場合

$data = []; 
foreach($input as $entry) { 
    $data[$entry->type] = $entry-value + ($data[$entry->type] ?? 0); 
} 

$data[$entry->type] ?? 0$data[$entry->type]または0の値を返します。詳細はthe RFC

0

emptyである。

$data = []; 
foreach($input as $entry) { 
    if(empty($data[$entry->type])) { 
     $data[$entry->type] = 0; 
    }else{ 
     $data[$entry->type] += $entry->value; 
    } 
} 

三項演算子を使用することもできます。それはこのタイプが満たされた最初の時間であれば、私はあなたが開始値として0を意味するものではありませんよねものの

$data[$entry->type] = isset($data[$entry->type])?$data[$entry->type] + $entry->value:0; 

が、$entry->value

$data[$entry->type] = empty($data[$entry->type]) ? 0 : $data[$entry->type] + $entry->value; 
0

非常にクリーンソリューションは、三項演算子を使用しています:あなたは、コードBのスタイルの詳細については懸念している場合は、a)はPHPのコーディング標準にhttp://www.php-fig.org/を確認することができますいずれか

$data[$entry->type] = isset($data[$entry->type])?$data[$entry->type] + $entry->value:$entry->value; 
+0

3進演算子の方が少し速いです(91文字対113文字)、私は実際にコードを読んでも問題はないと思います。私は本当に$ data [$ entry-> type]を3回繰り返して本質的に1回の操作を行うのは好きではありません。 – Moritur

0

は)あなた場合のif/else文のための三項演算子を使用しますより効率性を重視しています。

$data = []; 
foreach($input as $entry) 
{ 
    $data[$entry->type] = empty($data[$entry->type]) ? 0 : $data[$entry->type] + $entry->value; 
} 
関連する問題