ホームページ  >  記事  >  php教程  >  PHPのarray_slice関数とarray_splice関数の分析

PHPのarray_slice関数とarray_splice関数の分析

高洛峰
高洛峰オリジナル
2017-03-18 16:10:032150ブラウズ

この記事ではphpのarray_slice関数とarray_splice関数を中心に紹介していますので、興味のある方はぜひご覧ください

array_slice関数とarray_splice関数は配列のスライスを取り出す関数でもあります。元の削除されたスライス位置と新しいスライス。 JavaScript の Array.prototype.splice メソッドと Array.prototype.slice メソッドに似ています。


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 => &#39;c&#39;, 1 => &#39;d&#39;);
print_r(array_slice($input, 2, -1, true)); // array(2 => &#39;c&#39;, 1 => &#39;d&#39;);

実行ステップ


処理パラメータ: offset、length

offset が指す位置にポインタを移動

offset から開始し、length 要素を戻り配列にコピーします

動作フローチャートは次のとおりですfollow

PHPのarray_slice関数とarray_splice関数の分析

array_splice

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement = array() ]] )

入力の offset から始まる長さの要素を削除します。 置換パラメータがある場合は、置換配列を使用して削除された要素を置き換えます。

パラメータの説明

array_splice 関数の offset および length パラメータは、array_slice 関数と同じように使用されます。

replacement

このパラメータが設定されている場合、関数は置換配列を使用して置換します。

オフセットと長さで要素を削除する必要がないことが指定されている場合、置換はオフセット位置に挿入されます。

置換の要素が 1 つだけの場合は、array() でラップする必要はありません。

使用例

<?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 には、次のようなコードがあります:

/* Don&#39;t create the array of removed elements if it&#39;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);
 }

array_splice 関数は、削除されたスライスを返します。このコードの意味は、array_splice が値を返す必要がある場合は戻り配列を作成し、それ以外の場合はスペースの無駄を避けるために戻り配列を作成しないことです。これもちょっとしたプログラミングのトリックで、必要な場合にのみ返します。たとえば、$result = array_splice(...) が関数で使用される場合、return_value_used は true になります。


まとめ


日常のプログラミングでは、これら 2 つの関数を実装したときと同様に、最も特殊な状況に最初に対処し、その後で重複した判断を行わないようにする必要があります。新しい変数を保存する必要がある場合は、新しいスペースを確保します。そうでない場合は、無駄が発生します。


読んでいただきありがとうございます、お役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!

PHP の array_slice 関数と array_splice 関数の分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連記事:

php配列関数 sequence array_slice()

php array_slice関数の使い方とパラメータの詳細解説

php array_sliceは配列内のシーケンスインスタンスを取り出します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。