php关联数组输出序号,PHP:重新排序关联数组

这篇博客介绍了一种使用PHP实现的高效方法,通过四行代码实现数组元素的移动和排序。作者提供了一个名为`move_item`的函数,可以将数组元素在指定位置之前或之后移动,或者移到顶部和底部。函数支持相对位置移动(如向上、向下)和绝对位置移动(如指定距离)。示例展示了如何在数组中移动元素并调整它们的顺序。
摘要由CSDN通过智能技术生成

$arr = array(

'a' => 1,

'b' => 2,

'move me' => 9,

'c' => 3,

'd' => 4,

);嘿,我想在['b']之前移动['移动我']。我只用4行代码就可以做到!

$i = 0; foreach($arr as &$val) $val = array('sort' => (++$i * 10), 'val' => $val);

$arr['move me']['sort'] = $arr['b']['sort'] - 5;

uasort($arr, function($a, $b) { return $a['sort'] > $b['sort']; });

foreach($arr as &$val) $val = $val['val'];

我做了一个易于使用的功能:

function move_item(&$ref_arr, $key1, $move, $key2 = null)

{

$arr = $ref_arr;

if($key2 == null) $key2 = $key1;

if(!isset($arr[$key1]) || !isset($arr[$key2])) return false;

$i = 0; foreach($arr as &$val) $val = array('sort' => (++$i * 10), 'val' => $val);

if(is_numeric($move))

{

if($move == 0 && $key1 == $key2) return true;

elseif($move == 0) { $tmp = $arr[$key1]['sort']; $arr[$key1]['sort'] = $arr[$key2]['sort']; $arr[$key2]['sort'] = $tmp; }

else $arr[$key1]['sort'] = $arr[$key2]['sort'] + ($move * 10 + ($key1 == $key2 ? ($move < 0 ? -5 : 5) : 0));

}

else

{

switch($move)

{

case 'up': $arr[$key1]['sort'] = $arr[$key2]['sort'] - ($key1 == $key2 ? 15 : 5); break;

case 'down': $arr[$key1]['sort'] = $arr[$key2]['sort'] + ($key1 == $key2 ? 15 : 5); break;

case 'top': $arr[$key1]['sort'] = 5; break;

case 'bottom': $arr[$key1]['sort'] = $i * 10 + 5; break;

default: return false;

}

}

uasort($arr, function($a, $b) { return $a['sort'] > $b['sort']; });

foreach($arr as &$val) $val = $val['val'];

$ref_arr = $arr;

return true;

}

例子:

move_item($arr, 'move me', 'up'); //move it one up

move_item($arr, 'move me', 'down'); //move it one down

move_item($arr, 'move me', 'top'); //move it to top

move_item($arr, 'move me', 'bottom'); //move it to bottom

move_item($arr, 'move me', -1); //move it one up

move_item($arr, 'move me', 1); //move it one down

move_item($arr, 'move me', 2); //move it two down

move_item($arr, 'move me', 'up', 'b'); //move it before ['b']

move_item($arr, 'move me', -1, 'b'); //move it before ['b']

move_item($arr, 'move me', 'down', 'b'); //move it after ['b']

move_item($arr, 'move me', 1, 'b'); //move it after ['b']

move_item($arr, 'move me', 2, 'b'); //move it two positions after ['b']

//Special syntax, to swap two elements:

move_item($arr, 'a', 0, 'd'); //Swap ['a'] with ['d']

我希望这能帮助很多人,因为它是一个很棒的功能! :d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值