组合数组元素

时间:2015-07-28 06:33:02

标签: php arrays

我想循环遍历3个数组以创建1个单独的数组,其中包含所有3个值。

见下面的例子和结果。

输入:

array(
    '0' => array(
        '0' => array('a'),
        '1' => array('b')

    ),


    '1' => array(
        '0' => array('c'),
        '1' => array('d'),
        '2' => array('e')

    ),


    '2' => array(
        '0' => array('f')
    ),

)

结果:

array(
    '0' => 'acf',
    '1' => 'adf',
    '2' => 'aef',
    '3' => 'bcf',
    '4' => 'bdf',
    '5' => 'bef'
)

4 个答案:

答案 0 :(得分:1)

这个怎么样?

// $old_array = your original array
$new_array=array();

for ($i=0; $i<count($old_array[0]); $i++) {
    for ($j=0; $j<count($old_array[1]); $j++) {
         for ($k=0; $k<count($old_array[2]); $k++) {
              $new_array[]=$old_array[0][$i].$old_array[1][$j].$old_array[2][$k];
         }
    }
}

var_dump($new_array);

它返回:

array(6) { [0]=> string(3) "acf" [1]=> string(3) "adf" [2]=> string(3) "aef" [3]=> string(3) "bcf" [4]=> string(3) "bdf" [5]=> string(3) "bef" }

答案 1 :(得分:1)

有趣的是,几年前我遇到了同样的问题,所以这就是我提出的解决方案。

public static function combineElementsSuccessive($arry) 
{
    $result = [];
    if (empty($arry) || !is_array($arry)) {
        return result;
    }

    self::concatAndPush('', $result, $arry, 0);
    return $result;
}

private static function concatAndPush($str, &$res_arry, $arry, $index) 
{
    foreach ($arry[$index] as $key => $val) {
        $mod_str = $str . $val;
        if (isset($arry[$index+1])) {
            self::concatAndPush($mod_str, $res_arry, $arry, $index+1);
        }
        else {
            $res_arry[] = $mod_str;
        }
    }
}

See it in action

没关系静态方法,我不得不以某种方式将它们集成到一个充满遗留代码的应用程序中; - )

答案 2 :(得分:0)

将数组转换为以下数字数组并运行代码

$numbers = array(
array("a", "b"),
array("c", "d", "e"),
array("f"),

);

$f_nb = $numbers['0'];
$s_nb = $numbers['1'];
$t_nb = $numbers['2'];
$final_array = array();

for($a = 0; $a<sizeof($f_nb); $a++) 
{
    for($b = 0; $b<sizeof($s_nb); $b++) 
    {
        for($c = 0; $c<sizeof($t_nb); $c++) 
        {
            $final_array[] = $f_nb["$a"] . $s_nb["$b"] . $t_nb["$c"];
        }
    }
}

print_r($final_array);

答案 3 :(得分:0)

试试这个:

$array = array(
    '0' => array(
        '0' => array('a'),
        '1' => array('b')
    ),
    '1' => array(
        '0' => array('c'),
        '1' => array('d'),
        '2' => array('e')
    ),
    '2' => array(
        '0' => array('f')
    ),
);

$outcome = array();
foreach ($array['0'] as $key => $value1)
{
    foreach ($array['1'] as $value2)
    {
        foreach ($array['2'] as $value3)
        {
            $outcome[] = $value1[0].$value2[0].$value3[0];
        }
    }
}
print_r($outcome);