>  기사  >  php教程  >  PHP의 array_slice 및 array_splice 함수 분석

PHP의 array_slice 및 array_splice 함수 분석

高洛峰
高洛峰원래의
2017-03-18 16:10:031993검색

이 글에서는 주로 PHP의 array_slice 및 array_splice 함수를 소개합니다. 관심이 있는 경우 살펴보세요.

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이 음수이면 offset = num_in+offset이고, num_in+offset == 0이면 offset은 0으로 설정됩니다.

length

길이가 0보다 작으면 길이는 num_in - 오프셋 + 길이로 변환됩니다. 그렇지 않으면 오프셋+길이 > 오프셋. 처리 후에도 길이가 여전히 0보다 작으면 직접 반환됩니다.

preserve_keys

기본값은 false입니다. 숫자 키 값의 원래 순서는 기본적으로 유지되지 않습니다. 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부터 시작하여 반환된 배열에 길이 요소를 복사합니다

작업 흐름도는 다음과 같습니다

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

이 매개변수가 설정되면 함수는 교체를 위해 교체 배열을 사용합니다.

오프셋과 길이가 제거할 요소가 없도록 지정하는 경우 교체 항목이 오프셋에 삽입됩니다.

대체 요소가 하나만 있는 경우 이를 래핑하기 위해 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입니다.

요약

일상 프로그래밍에서는 이 두 기능을 구현할 때와 마찬가지로 가장 특별한 상황을 먼저 처리해야 합니다. 그런 다음 불필요한 판단을 계속하지 마십시오. 새 변수를 저장해야 할 때만 새 공간을 신청하십시오. 그렇지 않으면 낭비가 됩니다.

읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!

PHP에서 array_slice 및 array_splice 함수 분석과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련글 :

php 배열 함수 시퀀스 array_slice()

php array_slice 함수 사용법 및 매개변수에 대한 자세한 설명

php array_slice는 배열에서 시퀀스 인스턴스를 꺼냅니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.