この記事では、
phpのarray_slice関数とarray_splice関数の分析と、phpの
arraysを分割するための2つの関数(array_slice()、array_splice())をそれぞれ例を挙げて紹介します。ご参考に。 array_slice 関数と array_splice 関数は、配列のスライスを取り出すために使用されます。array_splice には、元の deleteslice の位置を新しいスライスに置き換える機能もあります。
javascript
array_slice
array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
指定された添え字のオフセットと長さを持つ配列の部分配列スライスを返します。
パラメータの説明
最初のパラメータ配列の長さが num_in であると仮定します。
offset
offset が正の数で length より小さい場合、返される配列は offset から始まります。 offset が length より大きい場合、操作は実行されず、直接返されます。 offset が負の数の場合、offset = num_in+offset、num_in+offset == 0 の場合、offset は 0 に設定されます。
length
length が 0 より小さい場合、length は num_in - offset + length に変換され、それ以外の場合、offset+length > array_
count の場合、length = num_in - offset になります。処理後も長さがまだ 0 未満の場合は、そのまま返されます。
preserve_keys
デフォルトでは数値キー値の元の順序は保持されません。 true に設定すると、配列の元の数値キー値の順序が保持されます。
使用例<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // returns "c", "d", and "e"
$output = array_slice($input, -2, 1); // returns "d"
$output = array_slice($input, 0, 3); // returns "a", "b", and "c"
print_r(array_slice($input, 2, -1)); // array(0 => 'c', 1 => 'd');
print_r(array_slice($input, 2, -1, true)); // array(2 => 'c', 1 => 'd');
ステップの実行
動作フローチャートは以下の通りです
array_splice
array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement = array() ]] )
入力のoffsetから長さの要素を削除します 置換パラメータがある場合は、削除されたものを置換します。要素を配列で置換します。
パラメータの説明array_splice 関数の offset パラメータと length パラメータは、array_slice 関数と同じように使用されます。
replacement<?php
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input变为 array("red", "green")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, -1);
// $input变为 array("red", "yellow")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
// $input变为 array("red", "orange")
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
// $input为 array("red", "green",
// "blue", "black", "maroon")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input为 array("red", "green",
// "blue", "purple", "yellow");
ソースコード解釈
array_spliceには、次のようなコードがあります:
日常のプログラミングでは、これら 2 つの関数を実装したときと同様に、最も特殊な状況に最初に対処し、その後で不必要な判断を避ける必要があります。新しい を保存する必要がある場合にのみ新しいスペースを使用します。そうでない場合は、無駄が発生します。 /* Don't create the array of removed elements if it's not going
* to be used; e.g. only removing and/or replacing elements */
if (return_value_used) { // 如果有用到函数返回值则创建返回数组,否则不创建返回数组
int size = length;
/* Clamp the offset.. */
if (offset > num_in) {
offset = num_in;
} else if (offset < 0 && (offset = (num_in + offset)) < 0) {
offset = 0;
}
/* ..and the length */
if (length < 0) {
size = num_in - offset + length;
} else if (((unsigned long) offset + (unsigned long) length) > (unsigned) num_in) {
size = num_in - offset;
}
/* Initialize return value */
array_init_size(return_value, size > 0 ? size : 0);
rem_hash = &Z_ARRVAL_P(return_value);
}
プログラミングのヒントでもあります。たとえば、$result = array_splice(...) が関数で使用される場合、return_value_used は true になります。
まとめ