加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP Array:将每个子数组连接在一起(概率)

发布时间:2020-12-13 17:29:40 所属栏目:PHP教程 来源:网络整理
导读:我想要找出更好的方式来做到这一点: $array = array( array('a','b','c'),array('e','f','g'),array('h','i','j','k','l')); 目标是打印这样的东西: a e ha e ia e ja e ka e la f ha f ia f ja f ka f la g ha g ia g ja g ka g l 然后为b和c做同样的事情
我想要找出更好的方式来做到这一点:
$array = array(
    array('a','b','c'),array('e','f','g'),array('h','i','j','k','l')
);

目标是打印这样的东西:

a e h
a e i
a e j
a e k
a e l

a f h
a f i
a f j
a f k
a f l

a g h
a g i
a g j
a g k
a g l

然后为b和c做同样的事情.

目前,我使用这个代码:

foreach ($array[0] as $val1) {
    foreach ($array[1] as $val2) {
        foreach ($array[2] as $val3) {
            echo "$val1  $val2  $val3 n";
        }
        echo "--------n";
    }
}

我也试图动态地创建上面的代码,并用eval执行它:

$eval         = '
     $data =array();
     ';
$eval_blocks  = '';
$eval_foreach = '';
$eval_data    = '
    $data[] = ';
$looplength   = count($array);

for ($i = 0; $i < $looplength; $i++) {
    $eval_foreach .= '
     foreach($array[' . $i . '] as $val' . ($i + 1) . '){
     ';
    if (($i + 1) == $looplength) {
        $eval_data .= ' $val' . ($i + 1) . ';';
    } else {
        $eval_data .= ' $val' . ($i + 1) . ' ." ".';
    }
    $eval_blocks .= '
     }
     ';
}
$eval = $eval . $eval_foreach . $eval_data . $eval_blocks;
eval($eval);
print_r($data);

但是,如果可能,我仍然希望找到更好的方法.

更新:

注意:$array是动态的,它可能包含两个子数组或更多

这可能会帮你尝试这样
class Test {
    // holds the combinations


     var $combinations= array(); 



    function getCombinations($batch,$elements,$i)  {
        if ($i >= count($elements)) {
            $this->combinations[] = $batch;
        } else {     
            foreach ($elements[$i] as $element) {
                $this->getCombinations(array_merge($batch,$element),$i + 1);
            }                       
        }
    }
}

//测试吧

$traits = array (
    array(
        array('Happy'),array('Sad'),array('Angry'),array('Hopeful')
    ),array(
        array('Outgoing'),array('Introverted')
    ),array(
        array('Tall'),array('Short'),array('Medium')
    ),array(
        array('Violent'),array('Quiet'),array('Psychotic')
    ),array(
        array('Handsome'),array('Plain'),array('Ugly')
    )
);

$test = new Test();
$start = array();
$test->getCombinations($start,$traits,0);   
print_r($test->combinations);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读