PHP使用array_merge重新排列数组下标的方法,乍一看不错,在做一个通讯协议的项目正好需要重新按照0~n排列下然后计算校验和。
先看看这个例子:
$data[0] = 0;
$data[2] = 2;
$data[1] = 1;
$result = array_merge($data); //准备发送,按照顺序排好
dump($result);
/*
本想让它帮忙排整齐,但输出与预期不符,php只会按照成员赋值顺序排列:
Array ( [0] => 0 [1] => 2 [2] => 1 )
*/
这就是这个函数颠倒是非的理由?因为这个低级错误浪费了1小时!做个记号希望后来的别掉进去。
解决方案: 用 array_pad 函数先定义好数组,然后随意操作,如下:
$data = array_pad(array(), 3, 0);
$data[0] = 0;
$data[2] = 2;
$data[1] = 1;
dump($result);
Array ( [0] => 0 [1] => 1 [2] => 2 )