我想把多个数组的每一个可能匹配的项列出来,我单独写死倒是可以写出来,但如果数组是可添加的,就不知道怎么写了,比如下面再加一个数组$d,不知道我描述清楚了没有
$a=array('a','b','c');
$b=array('A','B','C');
$c=array('1','2','3');
for($i=0;$i<count($a);$i++)
{
for($j=0;$j<count($b);$j++)
{
for($z=0;$z<count($c);$z++)
{
echo "{$a[$i]}-{$b[$j]}-$c[$z]<br>";
}
}
}

解决方案 »

  1. 运行结果是这样的,就是列出多个数组的每个可匹配项:
    a-A-1
    a-A-2
    a-A-3
    a-B-1
    a-B-2
    a-B-3
    a-C-1
    a-C-2
    a-C-3
    b-A-1
    b-A-2
    b-A-3
    b-B-1
    b-B-2
    b-B-3
    b-C-1
    b-C-2
    b-C-3
    c-A-1
    c-A-2
    c-A-3
    c-B-1
    c-B-2
    c-B-3
    c-C-1
    c-C-2
    c-C-3
      

  2. 用你的方法,岂不是多一个数组就多一重循环?记得回答过类似问题,期待更好的算法.
    $arr[] = array('a','b','c');
    $arr[] = array('A','B','C');
    $arr[] = array('1','2','3');
    $arr[] = array('4','5','6');$s = $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[] = $v;
    }
    echo "<pre/>";
    print_r($new);
      

  3. 最简单最容易理解的方法就是使用eval函数:
    $a[0]=array('a','b','c');
    $a[1]=array('A','B','C');
    $a[2]=array('1','2','3');$cmd1="";
    $cmd2="";
    for($i=0;$i<count($a);$i++)
    {
    $cmd1.='for($z['.$i.']=0;$z['.$i.']<count($a['.$i.']);$z['.$i.']++)';
    $cmd2.=($cmd2?'-':'').'{$a['.$i.'][$z['.$i.']]}';
    }
    eval("{$cmd1} echo \"$cmd2<br>\";");
      

  4. 利用eval实现多重循环,呵呵,挺有意思的代码.
      

  5. copy以前的代码,多了一行没用的foreach.重发$arr[] = array('a','b','c');
    $arr[] = array('A','B','C');
    $arr[] = array('1','2','3');$s = $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;
    }
    }
    echo "<pre/>";
    print_r($r);
      


  6. 感觉没什么好的办法
    在使用这个的时候:
    for($i=0;$i <count($a);$i++) 
    写成:
    $temp = count($a);
    for($i=0;$i <$temp;$i++) 
    效率应该好一点,防止每次都进行count操作
      

类似问题 »