将多个数组合并为一个数组,包含所有数组元素

3
我想把多个数组合并到一起以生成特定的格式。
$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

2
为什么第二个元素是1,2,6,10,30而不是2,6,10 - dWinder
1
如果一个数组有两个元素呢?而不是一个或四个?如果数字是1或N,那么这很简单,但如果数组中有1、N-1和N个元素呢? - Qirel
我想将第一个数组的第一个元素与另一个数组组合起来,使它变成1,2,6,10,30。 - Suraj Kumar
@SurajKumar 再说一遍,30 怎么办?它也会每次被加上吗? - Alive to die - Anant
@AlivetoDie 是的,每次都会增加30。 - Suraj Kumar
显示剩余8条评论
1个回答

2
请检查一下输出,我看到你有点在转置数组。我先做了一次转置,并为你的需求编写了一小段代码片段。
$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));

演示

注意:必须有来自初始索引的数据。

解释

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

编辑

function transpose($array) {
    array_unshift($array, null);
    return call_user_func_array('array_map', $array);
}
$temp = transpose($fieldArray['field_val']); // transposing array

function flipDiagonally($arr) {
    $out = array();
    foreach ($arr as $key => $subarr) {
        foreach ($subarr as $subkey => $subvalue) {
            $out[$subkey][$key] = $subvalue;
        }
    }
    return $out;
}

谢谢您的回答。请解释一下这段代码。 - Suraj Kumar
内联文档不够吗?还需要我解释更多吗? - Rahul
没问题,我会尽力理解。非常感谢你的帮助。 - Suraj Kumar
我写了一些内联文档,给出了一些解释列表,这是否解决了你的问题? - Rahul
当运行此代码时,会出现此问题:“无法使用字符串键解包数组”。 - Suraj Kumar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接