2017-07-31 59 views
0

我有一個循環來計算所有產品,並用特殊方法打印它們。每種方法的大小是每種方法的最大循環次數。 這就是我需要的:計算關聯數組的位置

loop=1 -> methode=print_box_simple 
loop=2 -> methode=print_box_5 
loop=3 -> methode=print_box_5 
loop=4 -> methode=print_box_5 
loop=5 -> methode=print_box_5 
loop=6 -> methode=print_box_5 
loop=7 -> methode=print_box_2_full 
loop=8 -> methode=print_box_2_full 
loop=9 -> methode=print_box_4 
loop=10 -> methode=print_box_4 

循環是產品的計數器。我需要以某種方式總結它的大小。繼承人我開始的代碼:

// Get layout by position 
$box_layout = self::getLayoutByPosition(self::$layout, $counter); 
... 
    private function getLayoutByPosition($layout, $counter) { 
    // The necessary code 
    } 
    // The layout array 
    private $layout = array(  1=>array('methode'=>'print_box_simple', 'size'=>1), 
            2=>array('methode'=>'print_box_5', 'size'=>5), 
            3=>array('methode'=>'print_box_2_full', 'size'=>2), 
            4=>array('methode'=>'print_box_4', 'size'=>4), 
            5=>array('methode'=>'print_box_2_half', 'size'=>2) 
    ); 

我希望它清楚我的意思。

+0

很抱歉,但你的目標是什麼,但清楚的。什麼產品,你如何循環,你是什麼意思,「總結它」? – arkascha

+0

'sum(array_column($ array,'size'))'? – Scuzzy

+0

@Scuzzy所以你有一個作爲透視的碩士學位? – arkascha

回答

0

我想這樣的事情應該工作:

// if you need a certain limit of operations then: 
$layout_limit = 10; 
$counter = 0; 

foreach ($this->layout as $item) { 
    for ($i = 0; $i < $item['size']; $i++) { 
     // calling method, named in `methode` key 
     $item['methode'](); 

     $counter++; 
     if ($counter == $layout_limit) { 
      break 2; // 2 so as to break `for` and `foreach` 
     } 
    } 
} 
0

你可以試試這個

$i = 0; 

    foreach($array as $key => $sub_array){ 

     if($sub_array['size'] > 0){ 

      for($j = 0 ; $j < $sub_array['size'] ; $j++){ 
       $i++; 
       echo 'Loop = '.$i.' -> methode = '.$sub_array['methode'].'<br/>'; 
      } 

     } 


    }