计算关联数组的位置

时间:2017-07-31 12:33:51

标签: php

我有一个循环,它计算所有产品并使用特殊的方法打印它们。每种方法的大小是每种方法的最大循环。 这就是我需要的:

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)
    );

我希望清楚我的意思。

2 个答案:

答案 0 :(得分: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`
        }
    }
}

答案 1 :(得分: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/>';
            }

        }


    }