版主到底是在哪里用掉了内存

来源:互联网 发布:yy官方协议软件 编辑:程序博客网 时间:2024/05/02 01:01


请教数组合并问题 [问题点数:40分]



$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));


[quote=引用 楼主 lumengabc 的回复:]
$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版本问题)
<?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


只研究代码不研究其他



<?php$startmemory =memory_get_usage();$pagestartime = microtime();$b = $a = range(0, 10000);$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);$endmemory =memory_get_usage();var_dump($endmemory-$startmemory);




<?php$startmemory =memory_get_usage();$pagestartime = microtime();$b = $a = range(0, 10000);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);$endmemory =memory_get_usage();var_dump($endmemory-$startmemory);




<?php$startmemory =memory_get_usage();$b = $a = range(0, 10000);$endmemory =memory_get_usage();var_dump($endmemory-$startmemory);


0 0
原创粉丝点击