如何在php中为人类(自然排序)排序关联数组?
以下代码:
将输出:10 - 1 - 7
以及如何获得“数字”排序(对人类而言)?喜欢:1 - 7 - 10
如果'Number‘是一个int,如果它是一个字符串,又会怎样呢?
发布于 2013-03-24 15:08:28
你可以这样试一试:
<?php
function record_sort($records, $field, $reverse=false)
{
$hash = array();
foreach($records as $record)
{
$hash[$record[$field]] = $record;
}
($reverse)? krsort($hash) : ksort($hash);
$records = array();
foreach($hash as $record)
{
$records []= $record;
}
return $records;
}
// Example below
$airports = array
(
array( "code" => "LHR", "name" => "Heathrow" ),
array( "code" => "LGW", "name" => "Gatwick" ),
);
printf("Before: <pre>%s</pre>", print_r($airports, true));
$airports = record_sort($airports, "name");
printf("After: <pre>%s</pre>", print_r($airports, true));
?>
Example Outputs:
Before: Array
(
[0] => Array ( [code] => LHR, [name] => Heathrow )
[1] => Array ( [code] => LGW, [name] => Gatwick )
)
After: Array
(
[0] => Array ( [code] => LGW, [name] => Gatwick )
[1] => Array ( [code] => LHR, [name] => Heathrow )
) 来自http://php.net/manual/en/function.asort.php
发布于 2013-03-24 15:05:08
字段"Number“是字符串,因此它被逐个字符(而不是数千个)、然后几百个(等等)进行比较。
您可以编写自己的排序函数,并将其与usort一起使用,也可以将sort与SORT_NUMERIC (可能是array_multi_sort )结合使用。
发布于 2013-03-28 15:46:27
如果Number字段是整数(或浮点数),则只需使用array_multisort并指定要对Number字段进行排序。http://php.net/manual/en/function.array-multisort.php文档中的示例3向您展示了如何对关联数组执行此操作。
如果Number是一个字符串,那么事情就更难了--在这种情况下,您必须进行“自然”排序,以确保"7“出现在"10”之前。如果您使用的是PHP5.4或更高版本,则可以使用带有array_multisort标志的SORT_NATURAL。如果您使用的是比PHP5.4更老的东西,那么您可能必须使用usort和strnatcmp。有关如何执行此操作的详细信息,请参见https://stackoverflow.com/a/11315019/26311。
https://stackoverflow.com/questions/15599961
复制相似问题