我有一个如下所示的数组,
array(
[!] = array(),
[a] = array(),
[.] = array(),
[n] = array(),
[3] = array(),
[1] = array());
我需要将此数组排序为,
array(
[a] = array(),
[n] = array(),
[1] = array(),
[3] = array(),
[!] = array(),
[.] = array());
如何在php()中执行此操作?
答案 0 :(得分:2)
最短的方式(在代码和经过一些基本的比较之后)是我在以下“Demo2”链接附近建议的代码:
uksort($arr, function($a, $b)
{
if (ctype_alnum("$a") === ctype_alnum("$b"))
return $a > $b;
return "$a" < "$b";
});
您可以使用the ksort
function:
ksort($array, SORT_STRING);
第二个参数告诉PHP将所有键(包括数字索引)作为字符串进行比较(意味着像3
这样的索引将被视为'3'
)。这将为您提供一个数组,其中键以升序顺序。您显示的键的顺序(所有单个字符)将与它们各自的ASCII值相同(.
为46,a
为97,依此类推)。如果您想要撤销订单,则必须使用the array_reverse
function:
$array = array_reverse($array, true);
同样,第二个参数告诉PHP 保留密钥,否则,索引将被重置,留下数字索引的数组。
您可以使用the uksort
function轻松跳过array_reverse
来电。它的工作方式与ksort
非常相似,但是将回调函数作为第二个参数,因此您也可以按索引排序,也可以按降序排序:
uksort($arr, function($a, $b)
{
return "$a" < "$b";//added quotes to convert to strings
});
您会注意到这会将'.'
键放在'!'
键的前面。实际上,如果两个键的类型相同(数字,字母),那么您可能希望按升序对它们进行排序,这可以轻松完成:
uksort($arr, function($a, $b)
{
if (ctype_alnum("$a") === ctype_alnum("$b"))//both are alnums, sort ascending
return $a > $b;//sort ascending
return "$a" < "$b";//else sort descending
});
如果您的PHP版本不支持匿名函数,您可以定义一个函数并将其名称作为第二个参数传递,但实际上:您应该升级:
function sortDesc($a, $b)
{
if (ctype_alnum("$a") === ctype_alnum("$b"))
return $a > $b;
return (string) $a < "$b";//casting is valid, too... both do the same thing
}
uksort($array, 'sortDesc');
答案 1 :(得分:2)
// function to sort the array keys with
function compare($a, $b)
{
// Look for [A-z]
if (ctype_alpha($a)) {
if (ctype_alpha($b)) {
return strcasecmp($a, $b);
} else {
return -1;
}
} elseif (ctype_alpha($b)) {
return 1;
}
if (is_int($a)) {
if (is_int($b)) {
return $a > $b;
} else {
return -1;
}
} elseif (is_int($b)) {
return 1;
}
return $a > $b;
}
$a = array(
'!' => array(),
'a' => array(),
'.' => array(),
'n' => array(),
'3' => array(),
'1' => array()
);
// use the function we defined above to sort the array.
uksort($a, "compare");
答案 2 :(得分:2)
您可以尝试:
<?php
$arr = array(
'!' => array(),
'a' => array(),
'.' => array(),
'n' => array(),
'3' => array(),
'1' => array(),
'$' => array(),
'8' => array(),
'm' => array(),
'x' => array(),
'c' => array(),
);
function mySort($arr){
$keys = array_keys($arr);
sort($keys);
$result = array();
$temp = array();
foreach($keys as $key){
if(!is_numeric($key) && !ctype_alpha($key)){
$temp[$key] = $arr[$key];
}else{
$result[$key] = $arr[$key];
}
}
foreach($temp as $k => $v){
$result[$k] = $v;
}
return $result;
}
print_r(mySort($arr));
?>
<强>结果:强>
Array
(
[a] => Array()
[c] => Array()
[m] => Array()
[n] => Array()
[x] => Array()
[1] => Array()
[3] => Array()
[8] => Array()
[!] => Array()
[$] => Array()
[.] => Array()
)