PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

请问数组合并有关问题

原创
2016-06-13 11:49:05 590浏览

请教数组合并问题

本帖最后由 lumengabc 于 2014-01-19 20:13:57 编辑
$a = array('sh'=>500,'bj'=>100, 'jx'=>20);
$b = array('bj'=>5, 'cq'=>50, 'sh'=>0);

//要求合并$a和$b, 得到结果:
$c =array(
'sh'=>array(500,0),
'bj'=>array(100,0),
'jx'=>array(20,0),
'cq'=>array(0,50),
);

即还是按数组$a的顺序排序,将$b的值叠加到对应$a
------解决方案--------------------
$a = array('sh'=>500,'bj'=>100, 'jx'=>20);
$b = array('bj'=>5, 'cq'=>50, 'sh'=>0);
$keys = array_keys(array_merge($a,$b));

foreach($keys as $k){
$ar[$k]=array($a[$k] ? $a[$k] : 0 , $b[$k] ? $b[$k] : 0);
}
print_r($ar);

Array
(
    [sh] => Array
        (
            [0] => 500
            [1] => 0
        )

    [bj] => Array
        (
            [0] => 100
            [1] => 5
        )

    [jx] => Array
        (
            [0] => 20
            [1] => 0
        )

    [cq] => Array
        (
            [0] => 0
            [1] => 50
        )

)
------解决方案--------------------


$a = array('sh' => 500, 'bj' => 100, 'jx' => 20);
$b = array('bj' => 5, 'cq' => 50, 'sh' => 0);
var_dump(array_merge_recursive($a+array_fill_keys(array_keys(array_merge($a, $b)), '0'), $b));





引用:
$a = array('sh'=>500,'bj'=>100, 'jx'=>20);
$b = array('bj'=>5, 'cq'=>50, 'sh'=>0);

//要求合并$a和$b, 得到结果:
$c =array(
'sh'=>array(500,0),
'bj'=>array(100,0),
'jx'=>array(20,0),
'cq'=>array(0,50),
);

即还是按数组$a的顺序排序,将$b的值叠加到对应$a


高性能时版主会代码会出现BUG我不知道你的数据量有多大
可以分别运行测试我本地是php5.5.6所有版主代码稍微改动了下否则程序跑不起来(关闭错误输出也不行php版本问题)


$pagestartime = microtime();
$b = $a = range(0, 100000);
array_merge_recursive($a + array_fill_keys(array_keys(array_merge($a, $b)), '0'), $b);
$pageendtime = microtime();
$starttime = explode(" ", $pagestartime);
$endtime = explode(" ", $pageendtime);
$totaltime = $endtime[0] - $starttime[0] + $endtime[1] - $starttime[1];
$timecost = sprintf("%s", $totaltime);
var_dump($timecost);


$pagestartime = microtime();
$b = $a = range(0, 100000);
$keys = array_keys(array_merge($a, $b));
$ar=array();
foreach ($keys as $k) {
$ar[$k] = array(isset($a[$k]) ? $a[$k] : 0, isset($a[$k]) ? $b[$k] : 0);
}
$pageendtime = microtime();
$starttime = explode(" ", $pagestartime);
$endtime = explode(" ", $pageendtime);
$totaltime = $endtime[0] - $starttime[0] + $endtime[1] - $starttime[1];
$timecost = sprintf("%s", $totaltime);
var_dump($timecost);


1w条数据时
版主代码


我的代码



10w条数据时
版主代码


我的代码


100w数据库时
都会出现
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)错误
memory_limit可解决此问题

我本地memory_limit = 128M

版主代码 9.4w 
我的代码 22w

只研究代码不研究其他
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。