现有二维数组如下:
$arr = array (  
'0' => array ( 'name' => 'n1','value' => '10' ),  
'1' => array ( 'name' => 'n2','value' => '20' ),  
'2' => array ( 'name' => 'n3','value' => '30' ),  
'3' => array ( 'name' => 'n4','value' => '40' ),  
'4' => array ( 'name' => 'n5','value' => '50' )
);需求如下:需轮转输出,就是value值最大的可输出最多次,为整个数组的个数(5次),依次递减,
     如:value为50的,需输出5次,value为40的,需输出4次..value为10的,需输出1次,
          当每个都按要求输出过时,再重来一遍,也就是当value为10的输出来1次后,value为50的,如果已输出5次,
那么此时 value为50的又可重新输出5次,这样轮转下去,
  每一次输出需同时输出3个value:
 现 刷新页面为一轮:
  每一轮输出结果应该如下:
  第1轮:50   40  30
  第2轮:50   40  30
  第3轮:50   40  30
  第4轮:50   40  20   (此时value为30的已输出了3次,到下一个value输出了)
   第5轮:50   20  10   (此时value为40的已输出了4次,到下一个value输出了)   
 第6轮:30   40  20   (此时value为50的已输出了5次,value为20的已输出了2次,value为10的已输出了1次,停止输出最早的value值,最先起来输出)
 ......
  
问:这功能如何实现,thanks

解决方案 »

  1.   

    还有在线的吗,帮帮忙,
    thanks
      

  2.   

    有找到规律的吗,帮我写下,thanks,
      

  3.   

    给你个思路数组 50 40 30 20 10取出数组最大的50, 40 ,30 。 控制x变量 对应3个数组里最小值 30,循环x=0,当x=30 ,停止30输出,把20补进,控制y=0当y=20,停止20输出 ,补进10第6轮 你研究在看, 
      

  4.   

    你的数据源可以生成的类似
    $arr = array('50'=>5,'40'=>4...)这个样子,这样就不用处理直接递归了。
    参考
    $arr = array (  
    '0' => array ( 'name' => 'n1','value' => '10' ),  
    '1' => array ( 'name' => 'n2','value' => '20' ),  
    '2' => array ( 'name' => 'n3','value' => '30' ),  
    '3' => array ( 'name' => 'n4','value' => '40' ),  
    '4' => array ( 'name' => 'n5','value' => '50' )
    );
    foreach( $arr as $v)
    {
    $t[$v['value']] = substr($v['name'],1);
    }
    krsort($t);
    function show3col( $t )
    {
    if( !!$t )
    {
    $i = 0;
    foreach( $t as $k=>$v)
    {
    if( $i < 3 )
    {
    echo $k." \n ";
    $t[$k]--;
    if( $t[$k] == 0 )unset( $t[$k] );
    $i++;
    }
    else break;
    }
    echo "<br/>";
    show3col( $t );
    }
    }
    show3col( $t );
      

  5.   

     第6轮:30 40 20 (此时value为50的已输出了5次,value为20的已输出了2次,value为10的已输出了1次,停止输出最早的value值,最先起来输出)
    ----------------------------------------
    怎么还有第6轮。。 这个30,40,20都输出足够次数了,30 40 20还要要输出是基于什么算法?
      

  6.   

    现有二维数组如下:
    $arr = array (   
    '0' => array ( 'name' => 'n1','value' => '10' ),   
    '1' => array ( 'name' => 'n2','value' => '20' ),   
    '2' => array ( 'name' => 'n3','value' => '30' ),   
    '3' => array ( 'name' => 'n4','value' => '40' ),   
    '4' => array ( 'name' => 'n5','value' => '50' )
    );需求如下:需轮转输出,就是value值最大的可输出最多次,为整个数组的个数(5次),依次递减,
         如:value为50的,需输出5次,value为40的,需输出4次..value为10的,需输出1次,
      当每个都按要求输出过时,再重来一遍,也就是当value为10的输出来1次后,value为50的,如果已输出5次,
    那么此时 value为50的又可重新输出5次,这样轮转下去,
    每一次输出需同时输出3个value:
    现 刷新页面为一轮:
    每一轮输出结果应该如下:
    第1轮:50 40 30
    第2轮:50 40 30
    第3轮:50 40 30
    第4轮:50 40 20 (此时value为30的已输出了3次,到下一个value输出了)
    第5轮:50 20 10 (此时value为40的已输出了4次,到下一个value输出了)   
    第6轮:30 40 20 (此时value为50的已输出了5次,value为20的已输出了2次,value为10的已输出了1次;最早到输出次数value值,最先起来又一轮输出)
      

  7.   

    第6轮:30 40 20 (此时value为50的已输出了5次,value为20的已输出了2次,value为10的已输出了1次;最早到输出次数value值,最先起来又一轮输出)
    ---------------------------------------------------
    最早到输出次数的为什么不是30 40 50?而是30 40 20?
      

  8.   

    不太难吧?
    建一个数组作为排序用的,键名就是序号
    unset + array_push/array_merge 应该可以搞定
      

  9.   

    先多谢大家
    此时 20与50都是一样的,只要符合 最早到输出次数value值,最先起来又一轮输出 就可,
      

  10.   

    这可能是你需要的$arr = array (  
      '0' => array ( 'name' => 'n1','value' => '10', num => 1, cnt =>0 ),  
      '1' => array ( 'name' => 'n2','value' => '20', num => 2, cnt =>0 ),  
      '2' => array ( 'name' => 'n3','value' => '30', num => 3, cnt =>0 ),  
      '3' => array ( 'name' => 'n4','value' => '40', num => 4, cnt =>0 ),  
      '4' => array ( 'name' => 'n5','value' => '50', num => 5, cnt =>0 )
    );function foo(&$ar, $n=3) {
      for($i=0; $i<$n; $i++) {
        $t[$i] = array_pop($ar);
        echo $t[$i]['value'] .' ';
        $t[$i]['cnt']++;
      }
      echo '<br />';
      while($i--) {
        if($t[$i]['num'] ==  $t[$i]['cnt']) {
          $t[$i]['cnt'] = 0;
          array_unshift($ar, $t[$i]);
        } else array_push($ar, $t[$i]);
      }
    }
    for($i=0; $i<10; $i++)
      foo($arr);
    50 40 30 
    50 40 30 
    50 40 30 
    50 40 20 
    50 20 10 
    30 40 10 
    30 40 20 
    30 40 20 
    40 50 10 
    50 20 30 
      

  11.   

    多谢23楼的,
    我是需运行一次页面,输出第一组数据,再运行一次,就输出第二组,依次...
    并要满足 最早到输出次数value值,最先起来又一轮输出 
    这是个不断运行页面,就会有输出的结果的,
     
      

  12.   

    你只需将数组存放在 session 中就可以了
    你没看到函数 foo 是需要显式的多次执行吗?