Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 动态生成foreach_Php_Arrays_Dynamic_Foreach - Fatal编程技术网

Php 动态生成foreach

Php 动态生成foreach,php,arrays,dynamic,foreach,Php,Arrays,Dynamic,Foreach,我正在尝试编写一个函数,它可以执行以下操作: 假设我有一个数组: $data=array( 数组('10','15','20','25'), 数组('Blue'、'Red'、'Green'), 数组('XL','XS') ) 我的结果数组应该如下所示: $result=array( 数组('10','15','20','25'), 数组('Blue','Red','Green','Blue','Red','Green','Blue','Red','Green','Blue','Red','Gr

我正在尝试编写一个函数,它可以执行以下操作: 假设我有一个数组:

$data=array(
数组('10','15','20','25'),
数组('Blue'、'Red'、'Green'),
数组('XL','XS')
)
我的结果数组应该如下所示:

$result=array(
数组('10','15','20','25'),
数组('Blue','Red','Green','Blue','Red','Green','Blue','Red','Green','Blue','Red','Green')
“XS”、“XS”、“X X”、“X X X”、“X X X”、“X X X”、“X X X”、“X X X”、“X X X”、“X X X”、“X X X”、“X X X X”、“X X X”、“X X X”、“X X X X”、“X X X”、“X X X”、“X X X”、“X X X”阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列阵列(“X X X X X”、“X X X X X”、“X X X X X”、“X X X X X”、“X X X X X X”、“X X X X X X”、“X X X X X”、“X X X X X X X”、“X X X X X X”、“X X X X X X X”、“X X X X X X”、“X”、“X X X X X X”、“X X X”、“X X X X X X”、“X”、“X”、“X X X X X X X”、“X”、“X X X X”、“X X X X X X”、“X X X X”、“X”、“X X X X”、“X”、“X X X‘XL’、‘XS’、‘XL’、‘XS’、‘XL’、‘XS’)
)
我一直坚持这样做,因为我想要一个函数能够做到这一点,无论第一个数组中有多少数组
$data

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

foreach($data[2]作为$value2){
$result[2][]=$value2;
foreach($data[1]作为$value1){
$result[1][]=$value1;
foreach($data[0]作为$value0){
$result[0][]=$value0;
}
}
}
经过一些研究,似乎递归函数是动态生成那些
foreach
的方法,但我无法让它工作


谢谢您的帮助。

只需使用数组填充和数组合并功能即可

$result = array(
  $data[0],
  array_merge(...array_fill(0,count($data[0]), $data[1])),
  array_merge(...array_fill(0,count($data[0])*count($data[0]), $data[2]))
  );
print_r($result); 

这是动态的:

$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));
}

注意:未定义变量:第15行/tmp/execpad-f98c9926d5ea/source-f98c9926d5ea警告:数组_merge()至少需要1个参数,第15行/tmp/execpad-f98c9926d5ea/source-f98c9926d5ea中给出的0警告:数组_merge()至少需要1个参数,第15行的/tmp/execpad-f98c9926d5ea/source-f98c9926d5ea中给出了0
是的,现在我很好,这正是我试图实现的目标,只是我需要使用
count($result[$key])
而不是
count($result[0])
!非常感谢:)您的解决方案非常有效,但当我不知道
$data
中的元素数时,我不知道如何继续使用您的答案。Abracadver的答案似乎更灵活,更易于在函数中使用,但感谢您的帮助!