array_merge和array_values重排索引数组性能比较

###?array_merge?合并一个或多个数组

array?**array_merge**?(?array?`$array1`?[,?array?`$...`?]?)

将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

-?如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将_不会_覆盖原来的值,而是附加到后面。
-?如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。

###?array_values?返回数组中所有的值

array?**array_values**?(?array?`$input`?)

返回?_`input`_?数组中所有的值并给其建立数字索引。

###?对比

两者都可以实现对索引数组的索引值重新排列的操作,方式如下

-?array_merge

```
array_merge(?$array,?[]?)
```

-?array_values

```
array_values(?$array?)
```

####?性能比较

```
$a?=?$b?=?[
????‘1‘?=>?‘2‘,
????‘2‘?=>?‘2‘,
????‘3‘?=>?‘2‘,
????‘4‘?=>?‘2‘,
????‘5‘?=>?‘2‘,
????‘6‘?=>?‘2‘,
????‘7‘?=>?‘2‘,
????‘8‘?=>?‘2‘,
????‘9‘?=>?‘2‘,
????‘10‘?=>?‘2‘,
];
$begin?=?microtime(?true?);
for?(?$i?=?1;?$i?<=?1000000;?$i++?)?{
????$m?=?array_merge(?$a,?[?]?);
}
$end1?=?microtime(?true?);
echo?($end1?-?$begin),?‘:‘;
print_r(?$m?);
$a?=?$b;
for?(?$i?=?1;?$i?<=?1000000;?$i++?)?{
????$m?=?array_values(?$a?);
}
$end2?=?microtime(?true?);
echo?($end2?-?$end1),?‘:‘;
print_r(?$m?);
```

执行结果

```
3.3471908569336:Array
(
????[0]?=>?2
????[1]?=>?2
????[2]?=>?2
????[3]?=>?2
????[4]?=>?2
????[5]?=>?2
????[6]?=>?2
????[7]?=>?2
????[8]?=>?2
????[9]?=>?2
)
2.975170135498:Array
(
????[0]?=>?2
????[1]?=>?2
????[2]?=>?2
????[3]?=>?2
????[4]?=>?2
????[5]?=>?2
????[6]?=>?2
????[7]?=>?2
????[8]?=>?2
????[9]?=>?2
)
[Finished?in?6.4s]
```

结论

-?不论执行多少次,`array_values`在重新排列索引数组的操作上都比`array_merge`快,只是差距确实不怎么明显

-?语义上`array_values`更清晰一些,毕竟`array_merge`是用来合并数组的

来自为知笔记(Wiz)

时间: 2024-11-08 21:13:36

array_merge和array_values重排索引数组性能比较的相关文章

类中属性返回形式(对象,关联数组,索引数组)

class A { public $x, $y; function __construct($x, $y)  { $this->x = $x; $this->y = $y; } function get_value($arr = true)  { if($arr == 'arr')   { // 类中属性以关联数组形式转换返回 return get_object_vars($this); }else if($arr == 'obj')   { //类中属性以对象形式返回 return $thi

unset()索引数组

$arr = ['0'=>['aa'],'1'=>['c'],'2'=>['bb','cc']]; unset($arr['1']); echo '<pre>'; print_r($arr); echo PHP_EOL; print_r(array_values($arr)); Array ( [0] => Array ( [0] => aa ) [2] => Array ( [0] => bb [1] => cc ) ) Array ( [0]

CCLuaObjcBridge调Objective-C方法传索引数组报invalid key to &amp;#39;next&amp;#39;错调试

CCLuaObjcBridge是cocos2d-x系列引擎与Objective-C进行交互的"桥梁",老廖的quick-cocos2d-x在其framework进行了简单了封装,封装到了luaoc类中,大体能够看成: luaoc.callStaticMethod = CCLuaObjcBridge.callStaticMethod 函数原型例如以下: --[[ 调用Objective-C中的静态方法 @param string className 类名 @param string me

Java 语法 索引 ----- 数组(Arrays)

数组声明,分配, 赋值 int y[] = new int[3]; y[0] = 1; y[1] = 2; y[2] = 3; int[] x = new int[] {1,2,3}; int[] x = {1,2,3}; 二维数组 String[][] x = {{"00","01"},{"10","11"}}; String[][] y = new String[2][2]; y[0][0] = "00"

JS 索引数组、关联数组和静态数组、动态数组

1 JS 索引数组.关联数组和静态数组.动态数组 2 3 数组分类: 4 5 1.从数组的下标分为索引数组.关联数组 6 7 var ary1 = [1,3,5,8]; 8 //按索引去取数组元素,从0开始(当然某些语言实现从1开始) 9 //索引实际上就是序数,一个整型数字 10 alert(ary1[0]); 11 alert(ary1[1]); 12 alert(ary1[2]); 13 alert(ary1[3]); 14 15 16 var ary2 = {}; 17 //存取时,以非

php关联数组和索引数组差别

没有查到明确的php中定义关联数组/索引数组的解析,根据phpdocument及百度的一些资料和实际的代码测试,对关联数组/索引数据进行定义解析.这个问题主要在和手机端ios app产品提供api时遇到,用关联数组转换为json能更好的用oc解析转换为数组. 关联数组:没有明确的索引键,默认从0开始作为索引键. $temp_arr = array ( '已经在别处买到', '商品不符合需求', '价格太高', '不想买了', '卖家没有交易记录', '其他原因', ); $temp_arr[0]

数据库表添加索引对性能的影响

1.添加索引后查询速度会变快 mysql中索引是存储引擎层面用于快速查询找到记录的一种数据结构,索引对性能的影响非常重要,特别是表中数据量很大的时候,正确的索引会极大的提高查询效率.简单理解索引,就相当于一本砖头厚书的目录部分,通过目录可以快速查找到想要找的内容具体所在的页码.在经常需要搜索的列上创建索引,可以加快搜索的速度.如果表中数据少的话,没必要用索引,如果表中数据很多的话,还是有索引比较好. 2.索引的优点 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 可以大大加快数据的检

PHP索引数组+unset使用不当导致的问题

转自先知社区 https://xz.aliyun.com/t/2443 0x00前言 通常网站后台可以配置允许上传附件的文件类型,一般登录后台,添加php类型即可上传php文件getshell.但是,随着开发者安全意识的提高,开发者可能会在代码层面强制限制php等特定文件类型的上传,有时会使用unset函数销毁删除允许上传文件类型的索引数组,如:Array('gif','jpg','jpeg','bmp','png','php'),不过错误地使用unset函数并不能到达过滤限制的效果. 0x01

【tp5】索引数组转成关联数组 ( $a=[],转换成 $a[&#39;aa&#39;=&gt;2,&#39;bb&#39;=&gt;&#39;3c&#39;] )

概念: 索引数组 ==== >>>$arr = []; 关联数组 ====>>> $arr = [ 'orange'=>1,'apple'=>'good'  ]; 1.在tp5之前的tp3.2,我们知道索引数组转关联数组,是直接可以转成功的,因为php是弱语言类型. 2.在tp5之后,索引数组不能直接转关联数组,必要通过isset进行判断,然后才能给转成关联数组. 否则,tp5会报错: 未定义数组索引: aa 如何避免这个错误呢? 可以isset进行判断['