重复数组到一定长度?
例如,我有一个包含 4 个元素的数组 array("a", "b", "c", d");
重复此数组以创建新数组的最快方法是什么具有一定的长度,例如 71 个元素?
I'm having an array for example with 4 elements array("a", "b", "c", d");
what is the fastest way to repeat this array to create a new array with a certain length, e.g 71 elements?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
使用 SPL InfiniteIterator 的解决方案:
真正的 SPL 黑客可能已经删除了
if (!$length--) break;
并使用限制迭代器:new LimitIterator(new InfiniteIterator(new ArrayIterator($values)), 0, $length)
,但我认为这太过分了...Solution using SPL InfiniteIterator:
The real SPL hackers might have dropped the
if (!$length--) break;
and instead used a limit iterator:new LimitIterator(new InfiniteIterator(new ArrayIterator($values)), 0, $length)
, but I thought that to be overkill...使用
each()
和reset()
和数组的内部指针:A simple solution using
each()
andreset()
and the array's internal pointer:为了加入这个俱乐部:
你要求最快,所以我做了一个基准测试(来源:http://pastebin.com/G5w7QJPU )
user2469998 是最快的,但它仅适用于具有单个字符的字符串值(或者如果使用 str_split 的第二个参数,则长度相同)。
In order to join this club:
You asked for the fastest so I did a benchmark (Source: http://pastebin.com/G5w7QJPU)
user2469998 is the fastest but it only works for string values with single chars (or the same length if you use second parameter of str_split).
如果您有可用的 PHP 5.3,您也可以尝试以下操作:
If you have PHP 5.3 available, you can also try this:
经过测试并有效。
您可以通过添加以下内容自行测试:
Tested and works.
You can test for yourself by adding this:
我认为 user2469998 最接近,但不是那么好。
对于我的示例,我使用管道进行内爆,并使用 str_repeat 函数构建一个满足长度的字符串,将其分解并修剪脂肪。
有很多方法可以实现这一目标,但我想分享一下我的方法。唯一的限制是您需要使用不属于数组项的角色进行内爆和爆炸,否则爆炸器将无法正常工作。
:)
I think that user2469998 was closest but just not that nice.
For my example, I use pipe to implode and the str_repeat function to build a string that meets the length, explode it back apart and trim the fat.
Many ways to achieve this but thought I'd share mine. The only restriction is that you need to use a character to implode and explode on which isn't part of the array items or the exploder won't work properly.
:)