PHP開発では、 array_slice関数は非常に実用的な配列動作関数であり、アレイから指定された要素を返す値としてカットできます。ただし、多くの初心者や中間プログラマーでさえ、 Array_sliceが元のアレイを直接変更し、コードロジックの混乱とデバッグの困難さをもたらすと誤って信じていることがよくあります。この記事では、 array_sliceの返品値の特性を詳細に分析し、元の配列を変更しない理由を明らかにし、トラップを避けるための例を示します。
array_sliceの基本的な構文は次のとおりです。
array array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)
$配列:元の配列。
$ offset :開始インターセプトがサポートされている位置は、アレイのテールからのカウントダウンを示します。
$ length :インターセプトされた長さ。デフォルトでは、配列内の残りの要素の数になります。
$ preserve_keys :元の配列のキー名を保持するかどうか、デフォルトのfalse。
この関数は、元の配列への参照ではなく、新しい傍受された配列を返します。
array_sliceは、「新しい配列」を返します。これは、元の配列から指定されたインターバル要素をコピーすることで構成されています。 PHPでの配列のコピーは価値によって渡されます(基礎となる実装にはコピーオンワリットの最適化があります)。関数の合格配列では、インプレース変更操作は実行されません。言い換えれば、 array_sliceの元の意図は、元の配列の完全性と不変性を維持することです。
したがって、 array_sliceを使用する場合、得られるのは傍受された結果の新しい配列であり、元の配列は変更されません。
$fruits = ['apple', 'banana', 'cherry', 'date'];
$sliced = array_slice($fruits, 1, 2);
print_r($sliced);
// 出力:
// Array
// (
// [0] => banana
// [1] => cherry
// )
print_r($fruits);
// 出力:
// Array
// (
// [0] => apple
// [1] => banana
// [2] => cherry
// [3] => date
// )
ここでは、 $ FRUITSアレイは変更されておらず、 $スライスは傍受された新しい配列です。
元の配列が変更されたと誤って考えました<br> 多くの人がarray_sliceを使用して元の配列を再度印刷し、元の配列が変更されていないことがわかります。そのため、コードロジックが正しくないと疑います。実際、 array_sliceは元の配列を変更しません。
array_sliceを使用してアレイを直接変更してみてください<br> 一部の人々は、次のコードを書くことができます。
$arr = [1,2,3,4,5];
$arr = array_slice($arr, 2);
これは、実際にインターセプト結果を元の配列変数に割り当てています。この時点で、変数は新しい配列を指し、元の配列は破棄されます。配列を「変更」する場合は、 Array_Slice関数自体が配列を変更する代わりに、実際に元の配列を新しい配列に置き換えます。
キー名が同じままであることを願っています、パラメーターを渡すのを忘れてください<br> デフォルトでは、4番目のパラメーターがtrueに設定されていない限り、 Array_slice ReIndex(0から始まる)によって返される配列。
$arr = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
$slice = array_slice($arr, 1, 2);
print_r($slice);
// 出力:
// Array
// (
// [0] => banana
// [1] => cherry
// )
ここで、キー名は数値インデックスになります。キー名を保持したい場合は、4番目のパラメーターを渡す必要があります。
$slice = array_slice($arr, 1, 2, true);
print_r($slice);
// 出力:
// Array
// (
// [b] => banana
// [c] => cherry
// )
array_sliceが新しい配列を返し、合格した配列自体を変更しないことは明らかです。
配列を「更新」する場合は、元の変数または他の変数に値を手動で割り当てる必要があります。
キー名の損失を避けるために、キー名を保持し、真実に合格する必要があるかどうかに注意してください。
array_spliceとの混乱は避けてください。これは、元の配列を直接変更する関数です。
Array_sliceは、PHPでアレイをインターセプトする関数です。元の配列を変更せずに新しい配列を単純に返すように設計されています。この設計は副作用を回避し、コードをより安全で保守可能にします。これを理解することで、開発者は誤解やトラップを回避し、アレイインターセプト機能を正しく使用し、コードの品質を向上させるのに役立ちます。
削除する必要がある場合は、元の配列を挿入し、変更する必要がある場合は、 array_spliceを使用できます。これは、元の配列を直接変更する関数です。 Array Interceptの場合、 Array_sliceは、不変で戻る新しい配列のための優先ツールです。