//一个数组:
$arr= array( 'name'=>'...' ,'time'=>'...' , 'date' = '....' );
//把他弄成:
$arr= array( 'date' = '....' ,'time'=>'...' , 'name'=>'...' );
怎么操作方便快捷呢?系统自带这种函数了吗?
还是得我新弄个数组按照我想要的键顺序赋值 这个笨办法呢?
//一个数组:
$arr= array( 'name'=>'...' ,'time'=>'...' , 'date' = '....' );
//把他弄成:
$arr= array( 'date' = '....' ,'time'=>'...' , 'name'=>'...' );
怎么操作方便快捷呢?系统自带这种函数了吗?
还是得我新弄个数组按照我想要的键顺序赋值 这个笨办法呢?
题主对题目的表述有些歧义,不知道你的排序要求是下面哪两种情况,索性都说一下。
1. 根据自定义规则排序
// 定义自定义规则,并赋予优先级
function cmp($a, $b){
$arr = [$a, $b];
foreach ($arr as &$value) {
switch ($value) {
case 'date':
$value = 4;
break;
case 'time':
$value = 2;
break;
case 'name':
$value = 3;
break;
case 'title':
$value = 1;
break;
default:
# code...
break;
}
}
return $arr[0] > $arr[1];
}
$arr = [
'name' => 'asdf',
'time' => 'fdfsd',
'date' => 'swere',
'title' => 'zdsfd'
];
uksort($arr, "cmp");
var_dump($arr);
结果
array(4) {
["title"]=>
string(5) "zdsfd"
["time"]=>
string(5) "fdfsd"
["name"]=>
string(4) "asdf"
["date"]=>
string(5) "swere"
}
2. 根据将原数组键值反转排序
$arr = [
'name' => 'asdf',
'time' => 'fdfsd',
'date' => 'swere',
'title' => 'zdsfd'
];
// 键值交换后的数组
$arrToFlip = array_flip($arr);
var_dump($arrToFlip);
// 根据值反转
$arrToFlipRev = array_reverse($arrToFlip, true);
var_dump($arrToFlipRev);
// 再次键值交换
$arrRes = array_flip($arrToFlipRev);
var_dump($arrRes);
结果
array(4) {
["asdf"]=>
string(4) "name"
["fdfsd"]=>
string(4) "time"
["swere"]=>
string(4) "date"
["zdsfd"]=>
string(5) "title"
}
array(4) {
["zdsfd"]=>
string(5) "title"
["swere"]=>
string(4) "date"
["fdfsd"]=>
string(4) "time"
["asdf"]=>
string(4) "name"
}
array(4) {
["title"]=>
string(5) "zdsfd"
["date"]=>
string(5) "swere"
["time"]=>
string(5) "fdfsd"
["name"]=>
string(4) "asdf"
}
另外说一句,以上代码不敢保证性能。
4 回答2.6k 阅读
4 回答2.3k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决