请问数组合并有关问题

WBOY
Freigeben: 2016-06-13 11:49:05
Original
788 Leute haben es durchsucht

请教数组合并问题

本帖最后由 lumengabc 于 2014-01-19 20:13:57 编辑
$a = array('sh'=>500,'bj'=>100, 'jx'=>20);<br />$b = array('bj'=>5, 'cq'=>50, 'sh'=>0);<br /><br />//要求合并$a和$b,  得到结果:<br />$c =array(<br />			'sh'=>array(500,0),<br />			'bj'=>array(100,0),<br />			'jx'=>array(20,0),<br />			'cq'=>array(0,50),<br />			);
Nach dem Login kopieren
Nach dem Login kopieren

即还是按数组$a的顺序排序,将$b的值叠加到对应$a
------解决方案--------------------
$a = array('sh'=>500,'bj'=>100, 'jx'=>20);<br />$b = array('bj'=>5, 'cq'=>50, 'sh'=>0);<br />$keys = array_keys(array_merge($a,$b));<br /><br />foreach($keys as $k){<br />    $ar[$k]=array($a[$k] ? $a[$k] : 0 , $b[$k] ? $b[$k] : 0);<br />}<br />print_r($ar);
Nach dem Login kopieren

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
)

)
------解决方案--------------------
<br /><?php<br /><br />$a = array('sh' => 500, 'bj' => 100, 'jx' => 20);<br />$b = array('bj' => 5, 'cq' => 50, 'sh' => 0);<br />var_dump(array_merge_recursive($a+array_fill_keys(array_keys(array_merge($a, $b)), '0'), $b));<br />
Nach dem Login kopieren





引用:
$a = array('sh'=>500,'bj'=>100, 'jx'=>20);<br />$b = array('bj'=>5, 'cq'=>50, 'sh'=>0);<br /><br />//要求合并$a和$b,  得到结果:<br />$c =array(<br />			'sh'=>array(500,0),<br />			'bj'=>array(100,0),<br />			'jx'=>array(20,0),<br />			'cq'=>array(0,50),<br />			);
Nach dem Login kopieren
Nach dem Login kopieren

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


高性能时版主会代码会出现BUG我不知道你的数据量有多大
可以分别运行测试我本地是php5.5.6所有版主代码稍微改动了下否则程序跑不起来(关闭错误输出也不行php版本问题)
<br /><?php<br /><br />$pagestartime = microtime();<br />$b = $a = range(0, 100000);<br />array_merge_recursive($a + array_fill_keys(array_keys(array_merge($a, $b)), '0'), $b);<br />$pageendtime = microtime();<br />$starttime = explode(" ", $pagestartime);<br />$endtime = explode(" ", $pageendtime);<br />$totaltime = $endtime[0] - $starttime[0] + $endtime[1] - $starttime[1];<br />$timecost = sprintf("%s", $totaltime);<br />var_dump($timecost);<br /><br /><br />$pagestartime = microtime();<br />$b = $a = range(0, 100000);<br />$keys = array_keys(array_merge($a, $b));<br />$ar=array();<br />foreach ($keys as $k) {<br />    $ar[$k] = array(isset($a[$k]) ? $a[$k] : 0, isset($a[$k]) ? $b[$k] : 0);<br />}<br />$pageendtime = microtime();<br />$starttime = explode(" ", $pagestartime);<br />$endtime = explode(" ", $pageendtime);<br />$totaltime = $endtime[0] - $starttime[0] + $endtime[1] - $starttime[1];<br />$timecost = sprintf("%s", $totaltime);<br />var_dump($timecost);<br />
Nach dem Login kopieren


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

只研究代码不研究其他
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage