首页 / PHP / php – 如何多次合并相同的数组?
php – 如何多次合并相同的数组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何多次合并相同的数组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3320字,纯文字阅读大概需要5分钟。
内容图文
![php – 如何多次合并相同的数组?](/upload/InfoBanner/zyjiaocheng/794/9a26273007484f6e96028fc3fa3e1d0f.jpg)
我想请求这项简单任务的帮助.假设我有一个数组(‘a’,’b’,’c’).
我想要的是将完全相同的数组多次合并到相同或新的空数组中.例如,将它合并为3x将产生以下结果:
array('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
我知道,有array_merge,但是如果我有可选的数量应该合并数组,如何使用它?当然我可以循环和合并:
$new = array();
for ($i=0; $i < $howManyTimes; $i++) {
$new = array_merge($new, array('a', 'b', 'c'));
}
或者我可以使用hack,在字符串和数组之间玩杂耍:
$new = str_split(str_repeat(implode('', array('a', 'b', 'c')), $howManyTimes));
但是,这些方法都不是很好,所以我很感激任何想法和其他/更好的方法在PHP(5)中做我需要的.
谢谢!
编辑:
得到@Amal Murali的答案后,似乎没有更好或更优雅的解决方案.
但是,为了使这个问题更有价值,我做了一些测试.通过10 000次迭代并使用示例数组:
>循环中的array_merge()大约需要37秒
>数组到字符串到数组技巧可笑7毫秒!!
这并不意外,因为array_merge可能会在每次迭代时进行数组扫描,但仍然需要记住.
无论如何,谢谢大家的意见;)
解决方法:
速度与“优雅”
问题是:array_merge()在PHP中速度很慢.为什么?好吧,那是因为它确实是它的名字:它合并哈希表.在PHP中,数组是哈希表,并且根据定义,这种结构上的合并操作不能快速.
但是,您可能希望采用一些“优雅”的方式来解决问题.这就是为什么首先要记住的是array_merge().但是 – 当普通循环更快时就是这种情况.所以你需要决定你的意图 – 拥有“漂亮”的代码或拥有“快速”代码.
处理array_merge()
实际上,array_merge()对于这种情况并不好.那是因为它会将此函数正好调用N次,其中N是重复次数.非常糟糕,因为正如我已经说过的,array_merge()很慢(因为哈希表操作成本).
不过,您可以通过正确使用此功能来执行此操作:
function repeatMerge($array, $rCount)
{
return call_user_func_array('array_merge', array_fill(1, $rCount, $array));
}
为什么这比使用array_walk()的选项更好?因为上面的函数只调用一次array_merge():它将首先收集所有需要的数组,然后 – 立即调用它们的合并函数.因此,所有哈希表操作开销只会进行一次.因此,上面的选项将在普通循环附近执行时间(这个问题最快)
普通循环&速度
最快的方法就是完全避免使用array_merge().喜欢:
function repeatLoops($array, $rCount)
{
$result = [];
$eCount = count($array);
for($j=0; $j<$rCount; $j++)
{
for($i=0; $i<$eCount; $i++)
{
$result[]=$array[$i];
}
}
return $result;
}
是.我们使用两个嵌套循环.但是我们总是写到数组的结尾,它的运行速度很快.但是,一般来说,我们只会赢得array_merge()的开销 – 因为在低级别,两个选项都可以归结为写入哈希表.
所以,测试一下
我已经使用Benchmark进行上述功能的相对测试.你可能会看到,事实上,第二个选项只赢得了“一些”时间(因此总时间较短,但只有一些常数) – 这是预期的 – 正如我所说,两个函数都会做同样的工作,只有差别是第一个函数将有array_merge()开销,这将完成一次.以下是测试数据:
$array = range(1, 1000);
$count = 1000;
并测试结果为1E1次:
//first function (repeatMerge), 1E1=10 times
array(3) {
[1]=>
float(2.1156709194183)
[2]=>
float(0.21156709194183)
[3]=>
int(10)
}
//second function (repeatLoops), 1E1=10 times
array(3) {
[1]=>
float(1.6837940216064)
[2]=>
float(0.16837940216064)
[3]=>
int(10)
}
和1E2次:
//first function (repeatMerge), 1E2=100 times
array(3) {
[1]=>
float(20.907063007355)
[2]=>
float(0.20907063007355)
[3]=>
int(100)
}
//second function (repeatLoops), 1E2=100 times
array(3) {
[1]=>
float(16.947901964188)
[2]=>
float(0.16947901964188)
[3]=>
int(100)
}
(你可以检查代码here的粘贴 – 因为它使用第三方库而不可能制作小提琴,此外,小提琴的执行时间有限).一点点解释(如果你不在github上检查那个).
数组中的[1](第一个索引):总执行时间
> [2](第二个索引)数组:avg.执行时间处理时间
数组中的[3](第三个索引):总迭代次数
内容总结
以上是互联网集市为您收集整理的php – 如何多次合并相同的数组?全部内容,希望文章能够帮你解决php – 如何多次合并相同的数组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。