gpt4 book ai didi

PHP 根据键排序数组,顺序为字母顺序,然后是数字,然后是特殊字符

转载 作者:行者123 更新时间:2023-12-04 15:04:58 24 4
gpt4 key购买 nike

我有一个如下所示的数组,

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 uksortfunction 轻松跳过 array_reverse 调用.它的工作方式与 ksort 非常相似,但将回调函数作为第二个参数,因此您也可以按索引降序排序:

uksort($arr, function($a, $b)
{
return "$a" < "$b";//added quotes to convert to strings
});

Demo

您会注意到,这会将 '.' 键放在 '!' 键的前面。事实上,如果两个键的类型相同(数字、alpha),看起来您想按升序对它们进行排序,这很容易做到:

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 根据键排序数组,顺序为字母顺序,然后是数字,然后是特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27127911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com