重复并合并PHP数组

时间:2019-01-22 11:08:22

标签: php arrays

使用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"
}

3 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,但这是一个很好的机会来展示如何使用各种PHP迭代器来做到这一点,包括ArrayIteratorInfiniteIteratorLimitIterator;例如:

// 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" 
}