ホームページ  >  記事  >  バックエンド開発  >  PHPのarray_splice関数の使い方

PHPのarray_splice関数の使い方

PHP中文网
PHP中文网オリジナル
2017-03-30 16:11:461559ブラウズ

この記事では、

phparray_slice関数array_splice関数の分析と、php

arrays

を分割するための2つの関数(array_slice()、array_splice())をそれぞれ例を挙げて紹介します。ご参考に。 array_slice 関数と array_splice 関数は、配列のスライスを取り出すために使用されます。array_splice には、元の deleteslice の位置を新しいスライスに置き換える機能もあります。
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要素をコピーにreturn array

動作フローチャートは以下の通りです


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_splice 関数の使用方法の内容です。その他の関連内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。 🎜🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。