我有一个包含月份(键)和值的数组,请参见下面的缩短示例。它是由遗留客户端系统生成的,所以我只能操纵我所看到的(不理想)。
$cost_data= array
(
[9] => 1110
[10] => 111
[8] => 100
[7] => 200
[6] => 690
[11] => 222
)
注意——非线性键代表一年中的几个月。
我需要将数据结构更改为以下格式,并且在尝试不同的方法和搜索几个小时后运气不佳。
$cost_data = array
(
array("9",1110),
array("10",111),
array("8",100),
array("7",200),
array("6",690),
array("11",222)
);
是否有一个简单的内置函数,或者有没有人知道实现这种转换的简洁方法?
这是我的去处。
<?php
$cost_data= [
9 => 1110,
10 => 111,
8 => 100,
7 => 200,
6 => 690,
11 => 222,
];
asort($cost_data); //sort
array_walk($cost_data,function(&$v,$k){
$v = [$k,$v];
});
print_r(array_values($cost_data));
输出(经过一些清理):
array (
0 => array(9,1110),
1 => array(10,111),
2 => array(8,100),
3 => array(7,200),
4 => array(6,690),
5 => array(11,222)
)
你可以在这里测试。
http://sandbox.onlinephpfunctions.com/code/95557489eb19e9e34c55abef71accd1219682350
如果您不关心键,您可以跳过array_values
重置数字索引的 ,并节省一点性能。没有array_values
它看起来像这样
array (
9 => array(9,1110),
10 => array(10,111),
8 => array(8,100),
7 => array(7,200),
6 => array(6,690),
11 => array(11,222)
)
所以,就像我说的,你可以通过忽略它来节省一点性能。我没有测量它,但我敢打赌它比 array_map 快一点,因为它确实通过引用传递。
我给array_map
和我的 都计时了array_walk
。对于 30k 次迭代
Array Walk Time: 0.045436
Array Map Time: 0.047619
我会说它们两者之间没有显着差异。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句