将多个数组与所有数组元素组合

时间:2019-06-04 11:26:40

标签: php arrays

我想组合多个数组以形成特定格式。

$fieldArray=[];
$fieldArray['field_val']['key_1']=array('1');
$fieldArray['field_val']['key_2']=array('1','2','3','4');
$fieldArray['field_val']['key_3']=array('5','6','7','8');
$fieldArray['field_val']['key_4']=array('9','10','11','12');
$fieldArray['field_val']['key_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);

我需要以下输出。

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

1 个答案:

答案 0 :(得分:2)

检查一下此输出,如我所见,您有点转置数组。 我首先换位并为您的要求写了一个代码段。

Up

Demo

  

注意:必须具有初始索引中的数据。

说明

  1. 请查看此link的换位方式
  2. 然后我将第一个数组作为我的基本数组,以与其他值一起玩
  3. 然后,我将第一个和最后一个值与其他值与空值映射。

编辑

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