2013-01-16 29 views
3

工作了几乎整整一天后,我的大脑陷入了我自己关于如何解决这个问题的想法。一个例子。多维数组中的过滤器可能性PHP/Codeigniter

  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 ..

这是一张优惠券,我希望它后组合的可能性进行排序,让我们说这个优惠券有2个可能的是: 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

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

用户可以选择1,X,2,1x,12,上一场比赛我的意思是,这是一个用户有13个不同游戏的所有选项x2,1x2,

,如果你需要更多的信息,只是告诉我,我会更新这个..

回答

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; 
} 
1

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

public function _combine_bets($array) { 

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

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

我不明白这个问题。

+0

我想你是在误解我的问题。如果我使用你的功能,我会在第四场比赛中获得1次。这就是它会让我回来,它会给我每场比赛的赌注。 我希望优惠券行回到我这里: array( 0 =>'1x2112x121xx1', 1 =>'1x2x12x121xx1' ); – murum

+0

并且您将返回的优惠券是每个matchNumber的投注?如果阵列没有正确的游戏编号,那么投注将被忽略? – Ms01