php数组(十九) array_shift 和array_unshift

1、array_shift  将数组开头的单元移出数组

返回值

返回移出的值,如果 array 为 空或不是一个数组则返回 null

(1)移除数组的第一个元素

1
2
3
4
5
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
?>

 输出:

1
2
3
4
5
6
Array
(
    [0] => banana
    [1] => apple
    [2] => raspberry
)

 

 

(2)删除大数组的第一个元素性能测试 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
ini_set('memory_limit', '5G');
 
$arr = [];
 
for($i = 0 ; $i<= 10000000; $i++){
    $arr[] = $i;
}
 
$starttime = microtime(true);
echo "start:" . $starttime . "\n";
array_shift($arr);
$endTime = microtime(true);
echo  "end:" . $endTime . "\n";
 
//使用array_reverse + array_pop
$starttime = microtime(true);
echo "reverse start:" . $starttime . "\n";
$arr2 = array_reverse($arr);
array_pop($arr2);
$endTime = microtime(true);
echo  "reverse end:" . $endTime . "\n";
 
//直接使用unset
$starttime = microtime(true);
echo "unset start:" . $starttime . "\n";
unset($arr[0]);
$endTime = microtime(true);
echo  "unset end:" . $endTime;

 输出: unset的性能最高

1
2
3
4
5
6
start:1629257137.3949
end:1629257137.4434
reverse start:1629257137.4435
reverse end:1629257137.613
unset start:1629257137.613
unset end:1629257137.613

 

2、array_unshift — 在数组开头插入一个或多个单元

array_unshift(array &$arraymixed ...$values): int

array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

(1)插入多个元素示例:

1
2
3
4
5
<?php
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
print_r($queue);
?>

 输出:

1
2
3
4
5
6
7
Array
(
    [0] => apple
    [1] => raspberry
    [2] => orange
    [3] => banana
)

 

2、插入数组

1
2
3
4
5
6
<?php
$queue = array("orange", "banana");
$stack = array("apple", "red");
array_unshift($queue, $stack);
print_r($queue);
?>

 输出:作为一个元素整体插入

1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => Array
        (
            [0] => apple
            [1] => red
        )
 
    [1] => orange
    [2] => banana
)

 

posted on   1450811640  阅读(301)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示