过滤多维数组PHP / Codeigniter中的可能性

时间:2013-01-16 07:36:56

标签: php codeigniter recursion

在工作了将近一整天之后,我的大脑陷入了我自己的想法,如何解决这个问题。一个例子。

  1. 1,
  2. x,
  3. 2,
  4. 1x,
  5. 1,
  6. 2,
  7. x,
  8. 1,
  9. 2,
  10. 1,
  11. x,
  12. X,
  13. 1 ..
  14. 这是一张优惠券,我希望在组合的可能性之后对它进行分类让我们说这张优惠券有两种可能性: 1x2112x121xx1,1x2x12x121xx1 ..第四场比赛是不同的......

    所以...我的问题是如何以程序化的方式完成。

    我从数据库中获取数据,看起来像这样。

    array(
        "gameNumber" => "1", 
        "bets" => array(
            [0] => "1"
        ), 
        "gameNumber" => "2", 
        "bets" =>  array(
            [0] = "x"
        ), 
        "gameNumber" => "3", 
        "bets" => array(
            [0] = "2"
        ), 
        "gameNumber" => "4", 
        "bets" => array(
            [0] = "1", 
            [1] = "x"
        )
    );
    

    我不确定这会对你有所帮助,但这就是它的样子。

    在最后一个答案的帮助下,我把它全部变成了一个递归数组: How to build recursive function to list all combinations of a multi-level array?

    所以我的新递归函数如下所示:

    public function _combine_bets($array)
    {
        $cur = array_shift($array);
        $result = array();
    
        if(!count($array)) {
            foreach($cur['bets'] as $option) {
                $result[] = $cur['matchNumber']."-".$option;
            }
            return $result;
        }
        foreach($cur['bets'] as $bet) {
            $result[$cur['matchNumber'].'-'.$bet] = $this->_combine_bets($array);
        }
        return $result;
    }
    

    这样我得到了这个数组: http://pastie.org/5692408

    Soo .....回到我的问题我想让它看起来只是赌注的价值..让我们说它应该是这样的:1x2112x121xx1,1x2x12x121xx1。而不是一个大阵列。我需要为所有可能性做这个,这是一个仅有2种不同可能性的优惠券,但是......它可以更多。

    用户可以在匹配中选择1,x,2,1x,12,x2,1x2我的意思是用户在13种不同游戏中拥有的所有选项,

    如果您需要更多信息,请告诉我,我会更新此信息。

2 个答案:

答案 0 :(得分:1)

主要问题是你想要一个递归函数? 这是一个没有递归的解决方案。

public function _combine_bets($array) {

    $result = '';
    foreach($array['bets'] as $bet) {
        $result .= $bet;
    }
// returns string
return $result;
}

你想要什么回来?为什么需要递归函数?

我不明白这个问题。

答案 1 :(得分:1)

我让不可能的事情成为可能,不要问我怎么做!

function _combine_bets($array, $curBet = null, $currentRow = null)
{
    $cur = array_shift($array);
    $result = array();

    if(!isset($currentRow))
        $currentRow = $curBet;
    else 
        $currentRow .= $curBet;


    if(!count($array)) {
        foreach($cur['bets'] as $bet) {
            $currentRow .= $bet;
            if(strlen($currentRow) == 13)
                $this->m_couponRows[] = $currentRow;
            $currentRow = null;
        }
        return $this->m_couponRows;
    }

    foreach($cur['bets'] as $bet) {
        $result[$bet] = $this->_combine_bets($array, $bet, $currentRow);
    }
    return $this->m_couponRows;
}