动态生成foreach

时间:2017-05-02 14:48:51

标签: php arrays dynamic foreach

我正在尝试编写一个执行以下操作的函数: 让我们说我有一个阵列:

$data = array(
    array('10','15','20','25'),
    array('Blue','Red','Green'),
    array('XL','XS')
)

我的结果数组应该是:

$result = array(
    array('10','15','20','25'),
    array('Blue','Red','Green','Blue','Red','Green','Blue','Red','Green','Blue','Red','Green')
    array('XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS','XL','XS')
)

我坚持这个因为我想要一个能够做到这一点的函数,无论第一个数组中有多少数组$data

我只能写这个,这就是给$result数组的原因:

foreach($data[2] as $value2){
    $result[2][] = $value2;
    foreach($data[1] as $value1){
        $result[1][] = $value1;
        foreach($data[0] as $value0){
            $result[0][] = $value0;
        }
    }
}

经过一些研究后,似乎递归函数是动态生成foreach的方法,但我无法使其工作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

只需使用array_fill和array_merge函数

[ "a", "b" ]

<强> demo on eval.in

答案 1 :(得分:0)

这是动态的:

$result[] = array_shift($data);

foreach($data as $value) {
    $result[] = call_user_func_array('array_merge',
                                     array_fill(0, count($result[0]), $value));
}
  • 获取并删除原始
  • 中的第一个元素
  • 循环剩余元素并使用第一个元素中的值X值填充结果
  • 由于元素是数组,因此将它们全部合并到结果

如果不需要修改原件,请使用以下方法:

$result[] = reset($data);

while($value = next($data)) {
    $result[] = call_user_func_array('array_merge',
                                     array_fill(0, count($result[0]), $value));
}