我需要做同样的事情,并且尝试了此处发布的以前的解决方案,但无法使它们起作用。我从这个聪明的人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 "
"; }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')
);
然后它将打印如下内容:
惊人-好处-奇妙
惊人-提议-奇妙
惊人-奖赏-奇妙
神奇-好处-惊人
奇妙-提议-惊人
奇妙-奖赏-惊人
标签:curr,arrays,res,2D,values,数组,array,PHP,size From: https://blog.51cto.com/yetaotao/5800296