我有一个像下面的数组,
array(
[!] = array(),
[a] = array(),
[.] = array(),
[n] = array(),
[3] = array(),
[1] = array());
我需要将此数组排序为
array(
[a] = array(),
[n] = array(),
[1] = array(),
[3] = array(),
[!] = array(),
[.] = array());
如何在php()中做到这一点?
参考方案
TL; TR
最短的方法(无论是在代码方面,还是经过一些基本比较)都是我在下面“ 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 array_reverse
function轻松跳过uksort
调用。它的工作方式与ksort
大致相同,但是将回调函数作为第二个参数,因此您也可以按索引降序排列:
uksort($arr, function($a, $b)
{
return "$a" < "$b";//added quotes to convert to strings
});
Demo
您会注意到,这会将'.'
键放在'!'
键的前面。实际上,如果两个键的类型相同(数字,字母),则似乎要按升序对其进行排序,您可以轻松地做到这一点:
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
});
Demo2
如果您的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');
PHP Count数组元素 - php嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…
PHP:将数据从二维数组复制到一维数组的最快方法 - php我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…
array_udiff返回不同的结果 - php我有这段代码来获取两个对象数组之间的区别:$diff = array_udiff($a, $b, function($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } ); $ a是[ { "id": "7", "attribute":…
PHP:获取调用引用的数组名称 - php假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…
PHP-MySQL结果转换为JSON - php我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…