gpt4 book ai didi

php - 字母数字数组排序(警告 : spaces as a thousands separator in numbers)

转载 作者:行者123 更新时间:2023-12-04 14:33:57 25 4
gpt4 key购买 nike

怎么做。例如我们有一个数组:

array(
0 => 'Regular 1 000',
1 => 'Regular 500',
2 => 'Regular 2 000',
3 => 'Big',
4 => 'Regular 1 000 000',
5 => 'Regular 50 000'
)

我需要按以下顺序放置它们:

array(
3 => 'Big',
1 => 'Regular 500',
0 => 'Regular 1 000',
2 => 'Regular 2 000',
5 => 'Regular 50 000',
4 => 'Regular 1 000 000'
)

而且我需要维护索引关联。看来我需要使用 uasort。谁能向我建议一个用于 callable ( $cmp_function ) 值的函数?

最佳答案

这仅适用于您的数组的数字部分,但我仍在尝试将我的头围在杂耍数组上以按字母顺序排序。如果有人可以添加,请随时更新。
如果可能,您可能想尝试更改格式,因为这很令人头疼

$x = array(
'Regular 1 000',
'Regular 500',
'Regular 2 000',
'Big',
'Regular 1 000 000',
'Regular 50 000'
);

给予:

编辑 Eureka !

$x = array(
'A 100', // extra for testing
'Regular 1 000',
'Regular 500',
'Regular 2 000',
'Big',
'Regular 1 000 000',
'Regular 50 000'
);

function cus_sort($a, $b) { // you can also just do $x = function ($a, $b) {}
$tmp_a = array(); $tmp_b = array(); // temp storage
$tmp_a = explode(" ", $a, 2);
if (@$tmp_a[1]) { // tmp_a exists (suppress invalid offset error if not)
$a_numeric = (int)preg_replace("/[^0-9]/", '', $tmp_a[1]);
// remove all non-numerical (...should add hyphens if needed...)
} else {
$a_numeric = false; // text only.
}
// else make sure that it evaluates false when we check.
$tmp_b = explode(" ", $b, 2); // split into maximum 2 parts at first space.
if (@$tmp_b[1]) { // tmp_b exists (suppress invalid offset error if not)
$b_numeric = (int)preg_replace("/[^0-9]/", '', $tmp_b[1]);
} else {
$b_numeric = false;
}
// onwards to sorting
if ($tmp_a[0] == $tmp_b[0]) { //alphabetical parts are the same.
// numerical sort
if (($a_numeric > $b_numeric) || (!$b_numeric)) {
return 1;
} elseif (($a_numeric < $b_numeric) || (!$a_numeric)) {
return -1;
} else {
return 0;
}
} else {
// alpha sort
$compare = strcasecmp($tmp_a[0], $tmp_b[0]);
// see note below
if ($compare > 0) {
return 1;
} elseif ($compare < 0) {
return -1;
} else {
return 0;
}
}
}

uasort($x, "cus_sort");

注意:strcasecmp(string $a, string $b) 是一个 case insensitive检查是否有序的数字方式。

print_r 返回:

Array
(
[0] => A 100
[4] => Big
[2] => Regular 500
[1] => Regular 1 000
[3] => Regular 2 000
[6] => Regular 50 000
[5] => Regular 1 000 000
)

关于php - 字母数字数组排序(警告 : spaces as a thousands separator in numbers),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641077/

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