首页 > 解决方案 > 如何展平和输出两个多维数组并打印成对值的组合?

问题描述

我有 2 个输入数组:

$data1 = array (
    0 => 0,
    1 => array ( 0 => 4, 1 => 8, ),
    2 => 0,
    3 => array ( 0 => 2, 1 => 6, 2 => 10, ),
    4 => array ( 0 => 1, 1 => 5, ),
    5 => array ( 0 => 3, 1 => 7, 2 => 11, ),
)

$data2 = array (
    0 => 0,
    1 => array ( 0 => 1, 1 => 5, ),
    2 => array ( 0 => 4, 1 => 8, ),
    3 => 0,
)

从第一个数组读取叶节点时,我的意思是迭代第二个数组的所有叶节点并打印所有成对的组合。

我的麻烦是只$data1打印子数组中的最后一个值,并且只打印最后一个值$data2

我的代码:

foreach ($data1 as $sourcevalue){
    if( is_array($sourcevalue) == "1")
    {
        foreach ($sourcevalue as $value)
        {
            $source=$value;
        }
    }
    else 
    {
        $source=$sourcevalue;
    }

    foreach ($data2 as $endvalue){
        if( is_array($endvalue) == "1")
        {
            foreach ($endvalue as $value1){
                $end=$value1;
            }
        }
        else 
        {
            $end=$endvalue;
        }
    }
    echo $source." ".$end."<br>";   
}

我当前的输出:

0 0
8 0
0 0
10 0
5 0
11 0

期望的输出:

0 0
0 1
0 5
0 4
0 8
0 0
4 0
4 1
4 5
4 4
4 8
4 0
8 0
8 1
8 5
8 4
8 8
8 0
0 0
0 1
0 5
0 4
0 8
0 0
2 0
2 1
2 5
2 4
2 8
2 0
6 0
6 1
6 5
6 4
6 8
6 0
10 0
10 1
10 5
10 4
10 8
10 0
1 0
1 1
1 5
1 4
1 8
1 0
5 0
5 1
5 5
5 4
5 8
5 0
3 0
3 1
3 5
3 4
3 8
3 0
7 0
7 1
7 5
7 4
7 8
7 0
11 0
11 1
11 5
11 4
11 8
11 0

如何修改我的代码以显示所有组合?

标签: php

解决方案


您也需要回显中间元素,而不仅仅是最后一个


foreach ($data1 as $sourcevalue){
    if (is_array($sourcevalue)) {
        foreach ($sourcevalue as $value) {
            printData2($value);
        }
    } else {
        printData2($sourcevalue);
    }
}

function printData2($source) {
    foreach ($data2 as $endvalue){
        if (is_array($endvalue)){
            foreach ($endvalue as $value1){
                pr($source, $value1);
            }
        } else  {
            pr($source, $endvalue);
        }
    }
}

function pr($source, $end) {
    echo "{$source} {$end}<br>";
}

例子


推荐阅读