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 ]] )
返回数组中指定下标offset和长度length的子数组切片。
参数申明
设第一个参数数组的长度为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。假如处置惩罚后length照样小于0,则直接返回。
preserve_keys
默许是false,默许不保留数字键值原递次,设为true的话会保留数组本来的数字键值递次。
相干引荐:《php数组》
运用实例
<?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');
运转步骤
·处置惩罚参数:offset、length
·挪动指针到offset指向的位置
·从offset最先,拷贝length个元素到返回数组
运转流程图以下:
array_splice
array array_splice(array &$input,int $offset[, int $length = 0 [, mixed $replacement = array() ]])
删除input中从offset最先length个元素,假如有replacement参数的话用replacement数组替代删撤除的元素。
参数申明
array_splice函数中的offset和length参数跟array_slice函数中的用法一样。
replacement
假如这个参数设置了,那末函数将运用replacement数组来替代。
假如offset和length指定了没有任何元素须要移除,那末replacement会被插进去到offset的位置。
假如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'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) { // 假如有效到函数返回值则建立返回数组,不然不建立返回数组 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数组怎样分段的细致内容,更多请关注ki4网别的相干文章!