2

私は別の開発者の古いコードに取り組んでおり、大量の通知があります: += 演算子を使用してデータを設定すると、未定義のインデックス エラーが発生します。基本的に、インデックスは配列にまだ設定されていないため、エラーが生成されます。

例:

$myArray = array();
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    $myArray['test'] += 1;
}

テスト インデックスがまだ設定されていないため、最初の実行でエラーが発生します。

次のコードでこのエラーを削除できることはわかっています。

$myArray = array();
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    if ( ! isset($myArray['test']) )
    {
        $myArray['test'] = $myValue;
    } 
    else 
    {
        $myArray['test'] += $myValue;
    }
}

ただし、このような約 50 の変更点があります。これらすべての isset ステートメントを書く価値はありますか、それとも私が知らないより良い方法はありますか?

編集:配列インデックスは常に同じではなく、設定されていない場合もあるため、この状況ではエラーを回避するためにインデックスを事前設定できないことに注意してください。

4

3 に答える 3

5

これは少し短くなりますが、多くの編集を行う場合は、まだ少し複雑になる可能性があります。

$myArray = array();
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    isset($myArray['test']) ? $myArray['test'] += $myValue : $myArray['test'] = $myValue;

}

グローバル関数を作成することもできます (テストされていません)。

$myArray = array();   
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    increment($myArray['test'], $myValue);
}

function increment(&$var, $inc){
    $var = isset($var) ? $var += $inc : $var = $inc
}
于 2012-11-01T20:22:20.037 に答える
2

PHP 7 以降を使用している場合は、Null 合体演算子を使用してこのコードをよりきれいにすることができます。

$myArray = [];
$myValue = 1;
for ($i = 1; $i <= 10; $i++) 
{
    $myArray['test'] = $myValue + ($myArray['test'] ?? 0);
}

ここでの利点は、コードが簡潔になるだけでなく、デフォルト値についてより明確になることです ( 0)

于 2021-03-19T02:39:13.437 に答える