请教一个php数组排序算法?

有个数组。

$a=[
     ['id'=>1,name='w1'],
     ['id'=>4,name='w3'],
     ['id'=>3,name='w2'],
     ['id'=>5,name='w5'],
     ['id'=>6,name='w22'],
     ['id'=>8,name='w222'],
     ['id'=>30,name='w30']
   ];

怎么变成这种的。

$a=[
     ['id'=>1, name='w1',  'sn'=>11],
     ['id'=>4, name='w3',  'sn'=>21],
     ['id'=>3, name='w2',  'sn'=>22],
     ['id'=>5, name='w5',  'sn'=>31],
     ['id'=>6, name='w22', 'sn'=>32],
     ['id'=>8, name='w222','sn'=>33],
     ['id'=>30,name='w30', 'sn'=>34]
   ];

sn的变化是2的0次方开始,1,2,4,8这种变化。如果下面还有数据,下次可能就是。41,42,43,44,45,46,47,48。

我搞不出来啊,看着挺简单的,无从下手。怎么写都不是,请教下高手帮我一下。谢谢!

sn就是顺序来的,顺序不便。不按id,name。就按现在的顺序。

阅读 1.3k
1 个回答
$a=[
 ['id'=>1,'name'=>'w1'],
 ['id'=>4,'name'=>'w3'],
 ['id'=>3,'name'=>'w2'],
 ['id'=>5,'name'=>'w5'],
 ['id'=>6,'name'=>'w22'],
 ['id'=>8,'name'=>'w222'],
 ['id'=>30,'name'=>'w30'],
 ['id'=>30,'name'=>'w30'],
 ['id'=>30,'name'=>'w30'],
 ['id'=>30,'name'=>'w30'],
 ['id'=>30,'name'=>'w30'],
 ['id'=>30,'name'=>'w30'],
 ['id'=>30,'name'=>'w30'],
   ];
function add_sn(&$arr){
    $len=count($arr);
   $j=0;
   $n=0;
   for ($i=1;$i<=pow(2,$n);$i++) { 
        $arr[$j]['sn']=($n+1).$i;
        if($i==pow(2,$n)){
            $i=0;
            $n++;
        }
        $j++;
        if($j==$len){
            return;
        }
   }    
   }

   
   add_sn($a);
   print_r($a);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题