[PHP source code] array_slice and array_splice functions, slicesplice

Source: Internet
Author: User

[PHP source code] array_slice and array_splice functions, slicesplice

The array_slice and array_splice functions are used to extract a segment of the array. array_splice also has the function of replacing the original position of the slice with a new slice. Similar to the Array. prototype. splice and Array. prototype. slice methods in javascript.

I have a more detailed description of the PHP source code on github. If you are interested, you can look around and give a star. PHP5.4 source code annotation. You can use the commit record to view the added annotations.

Array_slice

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )

Returns the subarray slices with the specified subscript offset and length in the array.

Parameter description

Set the length of the first parameter array to num_in.

Offset

If the offset value is positive and smaller than the length value, the returned array starts with the offset value. If the offset value is greater than the length value, the system returns the value directly. If offset is negative, offset = num_in + offset. If num_in + offset = 0, offset is set to 0.

Length

If the length is less than 0, the length will be converted to num_in-offset + length; otherwise, if the offset + length> array_count, the length = num_in-offset. If the length after processing is still less than 0, the system returns directly.

Preserve_keys

The default value is false. The original sequence of numeric keys is not retained by default. If it is set to true, the original sequence of numeric keys is retained.

Use instance
<?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');
Procedure

Processing Parameters: offset and length

Move the pointer to the position pointed to by offset

Starting from offset, copy the length element to the returned array.

 

The running flowchart is as follows:

<? Php $ input = array ("red", "green", "blue", "yellow"); array_splice ($ input, 2 ); // $ input to array ("red", "green") $ input = array ("red", "green", "blue", "yellow "); array_splice ($ input, 1,-1); // $ input changes to array ("red", "yellow") $ input = array ("red", "green ", "blue", "yellow"); array_splice ($ input, 1, count ($ input), "orange"); // $ input to array ("red ", "orange") $ input = array ("red", "green", "blue", "yellow"); array_splice ($ input,-1, 1, array ("black", "maroon"); // $ input is array ("red", "green", // "blue", "black ", "maroon") $ input = array ("red", "green", "blue", "yellow"); array_splice ($ input, 3, 0, "purple "); // $ input is array ("red", "green", // "blue", "purple", "yellow ");

 

Source code explanation

In array_splice, there is such a piece of code:

/* 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) {// if function return values are useful, the returned array is created. Otherwise, the returned array int size = length is not created; /* 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-off Set + 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 );}

The array_splice function returns the deleted slice. This Code indicates that if array_splice needs to return a value, the returned array is created. Otherwise, the array is not created to avoid space waste. This is also a programming tip, which is returned only when needed. For example, if $ result = array_splice (...) is used in a function, return_value_used is true.

Summary

At the end of this article, in normal programming, we should process the most special case first, just like the practices of the two functions, and then continue, to avoid unnecessary judgment; apply for new space only when new variables need to be saved; otherwise, it will cause waste.

 

The original article is limited in writing, so it is easy to learn. If there is anything wrong with the article, please let us know.

If this article is helpful to you, please click here for recommendations. Thank you ^_^

 

At last, I have a more detailed description of the PHP source code on github. If you are interested, you can look around and give a star. PHP5.4 source code annotation. You can use the commit record to view the added annotations.

For more source code articles, visit the personal homepage to continue viewing: hoohack

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.