版主到底是在哪里用掉了内存
来源:互联网 发布: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
- 版主到底是在哪里用掉了内存
- 到底是哪里出了问题?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- Linux Used内存到底哪里去了?
- 28335的程序到底是在哪里运行的。
- Java 到底是在哪里被运用的呢?
- 这个是错在哪里了
- LightSwitch分析--(二) 到底lightswitch在哪里操作了lsml
- 到底哪里出了问题?
- XCode里的模拟器到底在哪里?我的App被放到哪里了?
- Linux用掉的物理内存哪里去了
- 如何解决刷机变砖电脑不识别
- 1765. 笨小猴 质数的判断…注意0和1也不是质数呀
- CGLib动态代理原理及实现
- photoshop基础(笔记)
- mongodb c driver
- 版主到底是在哪里用掉了内存
- 在Windows上编译MongoDB C Driver
- 内存申请风波
- mysql 获取id最大值
- Day0.Initiate Building
- Mongodb 的C语言操作
- SRM 558
- paip.java 注解的详细使用代码
- 11