我需要做同樣的事情,我嘗試了之前發佈的解決方案,但無法使它們工作。我從這個聰明的傢伙http://www.php.net/manual/en/ref.array.php#54979樣本。然而,他的樣本沒有管理的不重複組合的概念。所以我包括那部分。這裏是我的改良版,希望它有助於:
$data = array(
array('apples', 'pears', 'oranges'),
array('steve', 'bob')
);
$res_matrix = $this->array_cartesian_product($data);
foreach ($res_matrix as $res_array)
{
foreach ($res_array as $res)
{
echo $res . " - ";
}
echo "<br/>";
}
function array_cartesian_product($arrays)
{
$result = array();
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array)
$size = $size * sizeof($array);
$res_index = 0;
for ($i = 0; $i < $size; $i++)
{
$is_duplicate = false;
$curr_values = array();
for ($j = 0; $j < $sizeIn; $j++)
{
$curr = current($arrays[$j]);
if (!in_array($curr, $curr_values))
{
array_push($curr_values , $curr);
}
else
{
$is_duplicate = true;
break;
}
}
if (!$is_duplicate)
{
$result[ $res_index ] = $curr_values;
$res_index++;
}
for ($j = ($sizeIn -1); $j >= 0; $j--)
{
$next = next($arrays[ $j ]);
if ($next)
{
break;
}
elseif (isset ($arrays[ $j ]))
{
reset($arrays[ $j ]);
}
}
}
return $result;
}
其結果將是這樣的:
蘋果 - 史蒂夫
蘋果鮑勃 -
梨 - 史蒂夫
梨鮑勃 -
橙子 - 史蒂夫
橘子鮑勃 -
如果該數據陣列是這樣的:
$data = array(
array('Amazing', 'Wonderful'),
array('benefit', 'offer', 'reward'),
array('Amazing', 'Wonderful')
);
然後將打印這樣的:
驚人 - 效益 - 美味
驚人 - 報價 - 美味
驚人 - 獎勵 - 美味
精彩 - 效益 - 驚人
精彩 - 報價 - 令人驚歎的
精彩 - 獎勵 - 驚人
會有陣列2,陣列3中,數組n?還是隻有兩個數組? –
嗨,對不起,沒有更清晰,可能是陣列2,陣列3到陣列n。謝謝。 – stukerr
你需要的是一個在SQL中簡單交叉連接,但需要在PHP中進行思考的問題 –