以前在segmentfault里提了个问题
有个数组,让红框里的键值连续0123456789而不是每次都从新0123,0123
想道用array_merge从新整合可是不知道循环该怎么写php
有位叔给出了一个超级简单的方法,看了下 array_reduce()函数,顿时开朗segmentfault
关于 array_reduce()
mixed array_reduce ( array $input , callback $function [, int $initial ] )
它将$input数组分别迭代到自定义回调函数$function中去,若是设定了第一个函数$initial ,则$initial 做为第san个数组处理数组
eg 1
这里php4.3的版本输出的是
Dog-Cat-Horse
而php5之后的版本输出的是
-Dog-Cat-Horse
缘由可能为5.3的版本由于就算没有传第三个参数,也默认把空值传到回调函数中
这样第一次传到my function里的值为“”和Dog函数
eg2
$b输出15,几回传值分别为1+2,3+3,6+4,10+5
$c输出1200,几回传值分别为101,102,203,604,240*5spa
回到最初的问题
咱们来看array_reduce()的对第三个参数的官方解释:若是指定了可选参数 initial,该参数将被当成是数组中的第一个值来处理,或者若是数组为空的话就做为最终返回值。
这里的第三个参数设定了个空数组array(),因此它不只做为第一个传入自定义函数merge()的值,也会做为array_reduce()的返回值给咱们想要的结果
以上代码最终的返回值为
array(9) {
[0]=>
int(1)
1=>
int(2)
2=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
[5]=>
int(6)
[6]=>
int(7)
[7]=>
int(8)
[8]=>
int(9)
}
原文:http://www.imotaku.net/.net