ホームページ > バックエンド開発 > PHPの問題 > PHP配列をセグメント化する方法

PHP配列をセグメント化する方法

爱喝马黛茶的安东尼
リリース: 2023-02-25 12:16:02
オリジナル
3519 人が閲覧しました

PHP配列をセグメント化する方法

array_slice 関数と array_splice 関数は、配列のスライスを取り出す関数ですが、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 - オフセット長に変換され、それ以外の場合、オフセット長 > array_count の場合、length = num_in -オフセット。処理後も長さがまだ 0 未満の場合は、そのまま返されます。

preserve_keys

デフォルトは false です。数値キー値の元の順序はデフォルトでは保持されません。true に設定すると、元の数値キー値の順序が維持されます。配列の部分は保持されます。

関連する推奨事項: "php array"

使用例

<?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 が指す位置にポインタを移動します

· オフセットから開始して、返された配列に長さの要素をコピーします。

操作のフローチャートは次のとおりです。

PHP配列をセグメント化する方法

array_splice

array array_splice(array &$input,int $offset[, int $length = 0 [, mixed $replacement = array() ]])
ログイン後にコピー

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

パラメータの説明

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配列をセグメント化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート