【问题标题】:PHP Array CombinationsPHP 数组组合
【发布时间】:2009-11-18 14:27:13
【问题描述】:

我正在使用this question 中接受的答案。由于我有相同的要求,我需要获取可变长度数组和可变数量元素的所有组合。但是,我还需要它来生成所有不使用数组的所有元素但按顺序排列的组合。有道理吗?

所以如果这是数组:

$数组 = 数组( 数组('1','2'), 数组('a','b','c'), 数组('x','y'), );

我还希望它添加 1a、1b、1c、2a、2b、2c。但不是 1x 或 1y,因为它错过了数组的第二个元素。

我不太清楚如何更改答案以包含此内容。

谢谢,心理学家

【问题讨论】:

  • 为什么 1x 和 1y 不正确?
  • @Ikke:因为它不包含来自数组第二个元素的任何内容,即a、b 或c。 @Bart:对不起,我应该更好地解释这种情况,但是我的情况与链接帖子的 OP 所面临的情况相同,但另外一点,改变了问题以希望反映这一点。
  • 我已经阅读了另一篇文章,但它没有回答我的问题。这就是我问的原因。所以让我再问一次,但现在举个例子。当您的数组如下所示时,您能否解释一下您正在寻找的组合:$array = array(array('1', '2'), array('a', 'b', 'c'), array('m', 'n'), array('x', 'y')); 请尽量避免使用“等”之类的术语,请列举所有组合。
  • 啊,好的,没问题,我正在做一些数据挖掘,以跟踪我们的网站在整个网站上的用户旅程中的执行情况,我已经协作了所有数据,并得到了一个由 x 组成的数组用户在我们网站上的点击量,以及他们在旅程的那个阶段点击的前 y 个元素(按钮、输入、链接)。我现在需要从中找出模式,找出一个人可以从这些结果中得到的每种可能的组合。希望有帮助吗?
  • Psytronic,你在这里回答谁?我想这不是我......如果是这样,你根本没有回答我的问题。您希望数组的输出是什么:$array = array(array('1', '2'), array('a', 'b', 'c'), array('m', 'n'), array('x', 'y'));

标签: php arrays combinations


【解决方案1】:

在回答链接问题时使用 Josh Davis 的方法:

    $array = array( array('1', '2'), 
                    array('a', 'b', 'c'), 
                    array('m', 'n'), 
                    array('x', 'y'));

    $result = array();
    $php = 'list($a' . implode(',$a', array_keys($array)) . ')=$array;';
    $close_brakets='';
    $r='';
    foreach($array as $k => $v)
    {
        $r .= '$v'.$k;
        $php.='foreach($a'.$k.' as $v'.$k.'){ $result[]="'.$r.'";';
        $close_brakets.="}";
    }

    $php .= $close_brakets;

    eval($php);

    print_r($result);

为您提供所需的组合

【讨论】:

  • 谢谢一定没有尝试过该代码,我实际上设法采用了我当前的代码并最终对其进行了更改,但这也确实有效:)
【解决方案2】:

这样的? 这个想法是循环一个数组,并与另一个数组中的每个值组合。

// Loop array[0].
for($i=0; $i<count($array[0]); $i++) {
    // Loop array[1]
    for($j=0; $j<count($array[1]); $j++) {
        echo $array[0][$i];
        echo $array[1][$j];
    }
}

【讨论】:

  • 我怀疑数组的长度是固定的。
【解决方案3】:

以我最初使用的代码为例,这是我想出的,以防其他人好奇

$patterns_array = 数组(); $php = ''; foreach ($patterns as $i = > $arr) { $php .= 'foreach ($patterns[' . $i . '] as $k' . $i . ' => $v' . $i . '){'; $tmp = 数组(); for($ii=1;$ii

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 2011-04-14
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多