我想结合多个数组来制作特定的format。

$fieldArray=[];
$fieldArray['field_val']['1']=array('1');
$fieldArray['field_val']['2']=array('1','2','3','4');
$fieldArray['field_val']['3']=array('5','6','7','8');
$fieldArray['field_val']['4']=array('9','10','11','12');
$fieldArray['field_val']['5']=array('30');

结果应该是

1,1,5,9,30 
1,2,6,10,30 
...and so on

我试过以下代码。但它没有给我正确的结果。

echo '<pre>';
$i=0;
$newArray=[];
foreach($fieldArray['field_val'] as $key=>$values){
    if($i==0){
        $orderId=$values[0];
    }
    array_unshift($values,$orderId);
    $newArray[]=$values;
$i++;
}

array_shift($newArray);
array_pop($newArray);
print_r($newArray);

我需要以下output。

1,1,5,9,30
1,2,6,10,30 and so on
分析解答

一旦检查了output,我可以看到,你有点转置阵列。 我首先转换并为您的要求写了一个片段。

$temp = array_map(null, ...$fieldArray['field_val']); // transposing array
foreach ($temp as $key => &$value) {
    foreach ($value as $key1 => &$value1) {
        // checking if empty
        if(empty($value1)){ 
            // fetching key1 value from first array and 
            // mapping it to empty values for all other arrays except first
            $value1 = $temp[0][$key1]; 
        }
    }
}
echo implode("\n", array_map(function ($value) { // replace with br if web
  return implode(",", $value);
}, $temp));

demo

Note: Must have data from the initial index.

说明

  1. 请看这链接我如何转置它,
  2. 然后我把第一个数组作为我的基础数组来玩其他值
  3. 然后我使用其他值与空值映射第一个和最后一个值。