需求: 一个正常排序的有序数组中,要把其中一个元素拿出来,给他一个新的位置,在不替换原来位置上的数组的情况下,把数组重新排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
function sort_org($order,$id,$p_id=0){ // 从数据库查出$p_id节点下除$id的所有数据,按照order排序。 $array_ids=array("id1","id2","id3","id4"); $length = count($array_ids); //判断给出的新位置的需要 if(!trim($order) || $order > $length){ array_push($array_ids,$id); //为空或者超大序号,就放在数组最后 }else if($order < 1){ array_unshift($array_ids,$id); //小于1就放在最前面 }else{ for($i=$length;$i>=$order;$i--){ $array_ids[$i] = $array_ids[$i-1]; } $array_ids [$order-1] = $id; } //使用foreac循环$array_ids foreach($array_ids as $k=>$v){ echo "排序结果:\r\n"; $order = $k + 1; var_dump("order: $order===>数据id: $v"); } } $order = 3; $id ='id_in'; sort_org($order,$id); |
解释:
根据自己的需求得到一个$array_ids数组,这个数组中是没有你想要转移的那个元素的,然后你想把那个指定的id放在那个位置上,就把那个位置上所有的值都往后移动一个位置,最后在指定位置上给出id作为value
中间有几个判断,是我自己的需求,因为用户如果输入是不一样的序号,相关注释都在里面
已经排序完成了,最后一个foreach循环,里面处理更多的逻辑吧