PHP中的sort函数及其排序标志

6
我正在学习关于PHP手册中的sort_flags,页面链接是这里
我不太理解每个标记所代表的不同之处。
总共只有6个标记,请有经验的人帮助我理解它们之间的差异,最好附带一些例子。非常感谢。

请勿忘记勾选(最好是)或+1有用的答案。 - halfer
1个回答

9

用于测试的数组:

$toSort = array(2, 1, "img1", "img2", "img10", 1.5, "3.14", "2.72");

请注意,3.14&2.72是字符串。
使用SORT_REGULAR标志(正常比较项目):
Array
(
    [0] => 2.72
    [1] => 3.14
    [2] => img1
    [3] => img10
    [4] => img2
    [5] => 1
    [6] => 1.5
    [7] => 2
)

使用SORT_NUMERIC标志(按数字比较项目,因此3.14被排序为数字而不是字符串):

Array
(
    [0] => img10
    [1] => img1
    [2] => img2
    [3] => 1
    [4] => 1.5
    [5] => 2
    [6] => 2.72
    [7] => 3.14
)

使用 SORT_STRING 标志(SORT_LOCALE_STRING 类似,但取决于当前语言环境,所有值都被视为字符串):

Array
(
    [0] => 1
    [1] => 1.5
    [2] => 2
    [3] => 2.72
    [4] => 3.14
    [5] => img1
    [6] => img10
    [7] => img2
)

使用SORT_NATURAL标志(注意img*字符串的顺序,它是自然的):

Array
(
    [0] => 1
    [1] => 1.5
    [2] => 2
    [3] => 2.72
    [4] => 3.14
    [5] => img1
    [6] => img2
    [7] => img10
)

SORT_FLAG_CASE可以与SORT_STRINGSORT_NATURAL一起使用,以进行不区分大小写的排序,例如:

// works like SORT_NATURAL but is case-insensitive
sort($toSort, SORT_NATURAL | SORT_FLAG_CASE);

后来我想这样可能不够,所以我决定回答。这其实是个好问题。我还没有测试过大写字符串,但这应该足够了。 - Zbigniew
https://3v4l.org/KCZo7 assert('12' > '2' && '2' > '13 ' && '13 ' > '12'); 循环,是的!因此,如果这两个值都看起来像数字,则进行数字比较。如果它们中的任何一个不是数字,则应用字符串比较。真的很糟糕 :) - donquixote
可能吧,但我猜这不太可靠。 - Zbigniew
这有助于解决我的Laravel 5.2集合排序问题。 Laravel文档没有显示此选项(https://laravel.com/docs/5.2/collections#method-sortby),尽管Collection.php文件中的sortBy函数显示它使用SORT_REGULAR作为默认的第二个参数(事后看起来很合理)。 我最终选择了:Item :: where($ itemQueryArray) - > with($ modelName) - > get() - > sortBy($ sortText,SORT_STRING | SORT_FLAG_CASE); - Keith DC
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接