基于键的PHP排序数组,顺序为字母,数字,特殊字符 - php

我有一个像下面的数组,

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_reversefunction轻松跳过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);…