有一个数组:$arr = array(
    "a" => array("r1" =>"ddas","d3" =>"322","fas" =>"zzxw")
    "ttt" => array("wxx" =>"dz666")
    "xz" => array("mon" =>"aaa","ha" =>"pop")
)其中$arr的元素不固定(就是说除了“a", "ttt", "xz"之外还可能有其它元素)
我想得到所有值的全排列(放在一个数组里),如下:array(
    array("ddas", "dz666", "aaa"),
    array("322", "dz666", "aaa"),
    array("zzxw", "dz666", "aaa"),
    array("ddas", "dz666", "pop"),
    array("322", "dz666", "pop"),
    array("zzxw", "dz666", "pop")
)请高手赐教!可用分不多了,全部送上!

解决方案 »

  1.   

    未仔细验证,仅提供参考.$arr = array(
        "a" => array("r1" =>"ddas","d3" =>"322","fas" =>"zzxw"),
        "ttt" => array("wxx" =>"dz666"),
        "xz" => array("mon" =>"aaa","ha" =>"pop")
    );
    $s = array_values($arr);
    $r = $s[0];
    for($i = 1,$j = count($s);$i<$j;$i++)
    {
    $n = array();
    foreach($r as $v)
    {
    foreach($s[$i] as $v2)
    {
    $n[] = $v.'|'.$v2;
    }
    $r = $n;
    }
    }
    foreach($r as $v)
    {
    $new[] = explode('|',$v);
    }
    echo "<pre/>";
    print_r($new);
      

  2.   

    调用两次array_value 就可以了吧,你是相去掉array_key?
      

  3.   

    算了,自已写了一个全排列递归,测试过了没问题,但下标要换成数字。
    function GetP($arrOrg)
    {
    if(empty($arrOrg[0])) return array(array());


    $arrCur = array_shift($arrOrg);
    $nSize = sizeof($arrCur);

    $arrP = GetP($arrOrg);

    $arrReturn = array(); foreach($arrP as $nIdx => $arrVal)
    {
    foreach($arrCur as $curIndex => $CurVal)
    {
    $arrTemp = $arrVal;
    array_unshift($arrTemp, $CurVal);
    $arrReturn[] = $arrTemp;
    }

    //$arrReturn[] = $arrTemp;
    }
    return $arrReturn;
    }