<?php
/**
* @author Wangzhe
*/
class Yoyi_Common_Array
{
/**
* 交叉合并二维数组,穷举可能性
* @param type $nArray 任意二维数组
* @author Nio.King 王哲
* @return array
* @example
* $arrData = array(
'a' => array("a1", "a2", 'a3'),
'b' => array("b1", "b2", 'b3', 'b4'),
'c' => array("c1", "c2", 'c3','c4','c5'),
);
print_r(Yoyi_Common_Array::crossMerger($arrData));
*/
public static function crossMerger($nArray)
{
$array = array();
$keyArr = array();
$result = array();
$master = array();
foreach ($nArray as $k => $item)
{
$keyArr[] = $k;
$array[] = $item;
}
$sum = 0;
for ($i = 0; $i < count($array); $i++)
{
if ($sum)
{
$sum *= count($array[$i]);
} else
{
$sum = count($array[$i]);
}
$master[] = array(0, count($array[$i]));
}
$i = 0;
//$result[] = $master;
while (true)
{
$ok = $zhuizi = count($array) - 1;
$master[$zhuizi][0]++;
while (true)
{
if ($master[$zhuizi][0] >= $master[$zhuizi][1])
{
$master[$zhuizi][0] = 0;
if (isset($master[$zhuizi - 1][0]))
{
$master[$zhuizi - 1][0]++;
}
}
$zhuizi--;
if ($zhuizi < 0)
{
$result[] = $master;
break;
}
}
$i++;
if ($i >= $sum)
{
break;
}
}
$overResult = array();
$realResult = array();
for ($i = 0; $i < count($result); $i++)
{
foreach ($result[$i] as $key => $value)
{
if ($key >= 0)
{
$overResult[$i][] = $value[0];
}
}
}
foreach ($overResult as $subArray)
{
$temp = array();
foreach ($subArray as $k => $v)
{
$temp[$keyArr[$k]] = $array[$k][$v];
}
$realResult[] = $temp;
}
//while()
return $realResult;
}
}
?>