Php 获取三个数组的所有可能组合,但不重复

Php 获取三个数组的所有可能组合,但不重复,php,arrays,Php,Arrays,我有三个动态填充的数组。可能只有一个或两个数组有数据 $array1 = array( [0] => 100GB [1] => 500GB ) $array2 = array( [0] => black [1] => yellow [2] => green ) $array1 = array( [0] => 2.5" ) 不,我需要将它们组合成一个新的数组,包含所有可能的变体 $variations = a

我有三个动态填充的数组。可能只有一个或两个数组有数据

$array1 = array(
    [0] => 100GB
    [1] => 500GB
)

$array2 = array(
    [0] => black
    [1] => yellow
    [2] => green
)

$array1 = array(
    [0] => 2.5"
)
不,我需要将它们组合成一个新的数组,包含所有可能的变体

$variations = array(
    [0] => 100GB - black - 2.5"
    [1] => 100GB - yellow - 2.5"
    [2] => 100GB - green - 2.5"
    [3] => 500GB - black - 2.5"
    [4] => 500GB - yellow - 2.5"
    [5] => 500GB - green - 2.5"
)
直到现在,我还没有找到一种方法来做到这一点。 有人能帮我吗


提前感谢您

您只需要使用嵌套循环即可。第一个数组上有一个循环,第二个数组上有一个循环,第三个数组上有一个循环,并将每个数组中的项目连接起来,然后将结果推送到一个新数组上。

使用foreach循环,您可以轻松实现这一点:

$array1 = array('100GB', '500GB');
$array2 = array('black', 'yellow', 'green');
$array3 = array('2.5');

$combinations = array();
foreach ($array1 as $i) {
  foreach ($array2 as $j) {
    foreach ($array3 as $k) {
      $combinations[] = $i.' - '.$j.' - '.$k;
    }
  }
}

echo implode("\n", $combinations);
编辑:要处理空数组,可以使用以下功能:

function combinations($arrays, $i = 0) {
    if (!isset($arrays[$i])) {
        return array();
    }
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }

    // get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // concat each array from tmp with each element from $arrays[$i]
    foreach ($arrays[$i] as $v) {
        foreach ($tmp as $t) {
            $result[] = is_array($t) ? 
                array_merge(array($v), $t) :
                array($v, $t);
        }
    }

    return $result;
}
此函数取自answer,因此作者值得称赞。然后,您可以通过以下方式调用此
组合
函数:

$array1 = array('100GB', '500GB');
$array2 = array();
$array3 = array('2.5');

$arrays = array_values(array_filter(array($array1, $array2, $array3)));
$combinations = combinations($arrays);

foreach ($combinations as &$combination) {
  $combination = implode(' - ', $combination);
}

echo implode("\n", $combinations);
这将产生:

100GB - 2.5
500GB - 2.5

嗨,谢谢你,这部分解决了问题。问题是,如果没有数组3 thann$,则结果为空。我怎样才能避免这个?谢谢你,那太好了!也许你也可以在这里有一个眼睛嗨,你能用一个示例代码显示这一点吗?