使用array_fill
,我想重复并合并数组。
例如,当我执行时:
$array = array_fill(0, 2, array_merge(
['hello'],
['by']
));
var_dump($array);
我有这个结果:
array(2) {
[0]=>
array(2) {
[0]=>
string(5) "hello"
[1]=>
string(2) "by"
}
[1]=>
array(2) {
[0]=>
string(5) "hello"
[1]=>
string(2) "by"
}
}
但是我想要这个结果:
array(4) {
[0]=>
string(5) "hello"
[1]=>
string(2) "by"
[2]=>
string(5) "hello"
[3]=>
string(2) "by"
}
答案 0 :(得分:2)
有很多方法可以做到这一点,但这是一个很好的机会来展示如何使用各种PHP迭代器来做到这一点,包括ArrayIterator
,InfiniteIterator
和LimitIterator
;例如:
// create an ArrayIterator with the values you want to cycle
$values = new ArrayIterator(['hello', 'by']);
// wrap it in an InfiniteIterator to cycle over the values
$cycle = new InfiniteIterator($values);
// wrap that in a LimitIterator defining a max of four iterations
$limit = new LimitIterator($cycle,0, 4);
// then you can simply foreach over the values
$array = [];
foreach ($limit as $value) {
$array[] = $value;
}
var_dump($array);
收益:
array(4) {
[0]=>
string(5) "hello"
[1]=>
string(2) "by"
[2]=>
string(5) "hello"
[3]=>
string(2) "by"
}
希望这会有所帮助:)
答案 1 :(得分:2)
再增加一步-将所有这些数组合并为一个:
$array = array_merge(...array_fill(0, 2, array_merge(
['hello'],
['by']
)));
在这里,我使用了可变参数函数语法。如果您的php版本(低于 php5.6 )不支持它,请使用call_user_func_array
:
$array = call_user_func_array('array_merge', array_fill(0, 2, array_merge(
['hello'],
['by']
)));
答案 2 :(得分:0)
您可以使用flatten函数,该函数将处理代码的结果。
function flatten(array $ar) {
$r = array();
array_walk_recursive($ar, function($a) use (&$r) { $r[] = $a; });
return $r;
}
$array = flatten(
array_fill(0, 2, array_merge(
['hello'],
['by']
))
);
var_dump($array);
结果:
array(4) {
[0]=> string(5) "hello"
[1]=> string(2) "by"
[2]=> string(5) "hello"
[3]=> string(2) "by"
}