首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不按字母顺序排序的PHP strcmp函数

问不按字母顺序排序的PHP strcmp函数
EN

Stack Overflow用户
提问于 2013-07-24 14:12:07
回答 1查看 226关注 0票数 0

我有这个剧本

代码语言:javascript
复制
$todos=array(
    '0' => array('id' => 46, 'nombre' => 'b2 miami downtown','precio' => 149.01,'tipo' => 'expedia'),
    '1' => array('id' => 242,'nombre' => 'b2 Miami Downtown','precio' => 176.98,'tipo' => 'hotelbeds'),
    '2' => array('id' => 240,'nombre' => 'b2 Miami Downtown','precio' => 131.62,'tipo' => 'hotelbeds'),
    '3' => array('id' => 241,'nombre' => 'b2 Miami Downtown','precio' => 131.62,'tipo' => 'hotelbeds'),
    '4' => array( 'id' => 178,'nombre' => 'Z Ocean Hotel South Beach','precio' => 400.93,'tipo' => 'expedia'),
    '5' => array( 'id' => 254,'nombre' => 'Whitelaw Hotel','precio' => 142.29,'tipo' => 'hotelbeds'),
    '6' => array( 'id' => 124, 'nombre' => 'Whitelaw Hotel','precio' => 132.04,'tipo' => 'tourico'),
    '7' => array( 'id' => 62, 'nombre' => 'Westin Colonnade Coral Gables','precio' => 138.39,'tipo' => 'tourico'),
    '8' => array( 'id' => 275, 'nombre' => 'Westgate South Beach','precio' => 166.79,'tipo' => 'hotelbeds'),
    '9' => array( 'id' => 44, 'nombre' => 'W South Beach','precio' => 374.55,'tipo' => 'tourico'),
    '10' => array( 'id' => 206, 'nombre' => 'Holiday Inn Express West Doral Miami Airport','precio' => 103.22,'tipo' => 'hotelbeds'),
    '11' => array( 'id' => 117, 'nombre' => 'Holiday Inn Express Miami International Airport','precio' => 106.3,'tipo' => 'expedia'),
    '12' => array( 'id' => 114, 'nombre' => 'Holiday Inn Express Miami Airport Doral Area','precio' => 113,'tipo' => 'tourico'),
    '13' => array( 'id' => 78, 'nombre' => 'Holiday Inn Express Doral','precio' => 93.36,'tipo' => 'expedia'),
    '14' => array( 'id' => 62, 'nombre' => 'Holiday Inn Express & Suites Kendall East Miami','precio' => 128.46,'tipo' => 'expedia'),
    '15' => array( 'id' => 18, 'nombre' => 'Best Western Plus Kendall Hotel & Suites','precio' => 429.55,'tipo' => 'tourico'),
    '16' => array( 'id' => 19, 'nombre' => 'Best Western Plus Kendall Hotel & Suites','precio' => 429.55,'tipo' => 'expedia'),
    '17' => array( 'id' => 120, 'nombre' => 'Best Western Kendall Hotel & Suites','precio' => 114.27,'tipo' => 'expedia'),
    '18' => array( 'id' => 69, 'nombre' => 'Holiday Inn Express & Suites Kendall','precio' => 126.5,'tipo' => 'expedia'));

    echo "<pre>";
    print_r($todos);

    function comp($a,$b){
        if(soundex($a['nombre'])==soundex($b['nombre'])) return($a['precio']-$b['precio']);
        if(soundex($a['nombre'])!=soundex($b['nombre'])) return strcmp($a['nombre'], $b['nombre']);
    }
    usort($todos,'comp');
    print_r($todos);
    echo "<pre>";

我需要对数组进行排序,首先按酒店名称排序,然后按价格(精确)对每个酒店进行排序。之所以使用soundex,是因为同一家酒店可能有不同的名称,这取决于供应商(证明),所以我需要召集酒店,并以最低的价格排在第一位,删除其他酒店,这样我才能提供最好的价格。

产出:

代码语言:javascript
复制
Array
(
   [0] => Array
        (
            [id] => 46
            [nombre] => b2 miami downtown
            [precio] => 149.01
            [tipo] => expedia
        )

    [1] => Array
        (
            [id] => 242
            [nombre] => b2 Miami Downtown
            [precio] => 176.98
            [tipo] => hotelbeds
        )

    [2] => Array
        (
            [id] => 240
            [nombre] => b2 Miami Downtown
            [precio] => 131.62
            [tipo] => hotelbeds
        )

    [3] => Array
        (
            [id] => 241
            [nombre] => b2 Miami Downtown
            [precio] => 131.62
            [tipo] => hotelbeds
        )

    [4] => Array
        (
            [id] => 178
            [nombre] => Z Ocean Hotel South Beach
            [precio] => 400.93
            [tipo] => expedia
        )

    [5] => Array
        (
            [id] => 254
            [nombre] => Whitelaw Hotel
            [precio] => 142.29
            [tipo] => hotelbeds
        )

    [6] => Array
        (
            [id] => 124
            [nombre] => Whitelaw Hotel
            [precio] => 132.04
            [tipo] => tourico
        )

    [7] => Array
        (
            [id] => 62
            [nombre] => Westin Colonnade Coral Gables
            [precio] => 138.39
            [tipo] => tourico
        )

    [8] => Array
        (
            [id] => 275
            [nombre] => Westgate South Beach
            [precio] => 166.79
            [tipo] => hotelbeds
        )

    [9] => Array
        (
            [id] => 44
            [nombre] => W South Beach
            [precio] => 374.55
            [tipo] => tourico
        )

    [10] => Array
        (
            [id] => 206
            [nombre] => Holiday Inn Express West Doral Miami Airport
            [precio] => 103.22
            [tipo] => hotelbeds
        )

    [11] => Array
        (
            [id] => 117
            [nombre] => Holiday Inn Express Miami International Airport
            [precio] => 106.3
            [tipo] => expedia
        )

    [12] => Array
        (
            [id] => 114
            [nombre] => Holiday Inn Express Miami Airport Doral Area
            [precio] => 113
            [tipo] => tourico
        )

    [13] => Array
        (
            [id] => 78
            [nombre] => Holiday Inn Express Doral
            [precio] => 93.36
            [tipo] => expedia
        )

    [14] => Array
        (
            [id] => 62
            [nombre] => Holiday Inn Express & Suites Kendall East Miami
            [precio] => 128.46
            [tipo] => expedia
        )

    [15] => Array
        (
            [id] => 18
            [nombre] => Best Western Plus Kendall Hotel & Suites
            [precio] => 429.55
            [tipo] => tourico
        )

    [16] => Array
        (
            [id] => 19
            [nombre] => Best Western Plus Kendall Hotel & Suites
            [precio] => 429.55
            [tipo] => expedia
        )

    [17] => Array
        (
            [id] => 120
            [nombre] => Best Western Kendall Hotel & Suites
            [precio] => 114.27
            [tipo] => expedia
        )

    [18] => Array
        (
            [id] => 69
            [nombre] => Holiday Inn Express & Suites Kendall
            [precio] => 126.5
            [tipo] => expedia
        )

)

排序数组

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [id] => 120
            [nombre] => Best Western Kendall Hotel & Suites
            [precio] => 114.27
            [tipo] => expedia
        )

    [1] => Array
        (
            [id] => 19
            [nombre] => Best Western Plus Kendall Hotel & Suites
            [precio] => 429.55
            [tipo] => expedia
        )

    [2] => Array
        (
            [id] => 18
            [nombre] => Best Western Plus Kendall Hotel & Suites
            [precio] => 429.55
            [tipo] => tourico
        )

    [3] => Array
        (
            [id] => 78
            [nombre] => Holiday Inn Express Doral
            [precio] => 93.36
            [tipo] => expedia
        )

    [4] => Array
        (
            [id] => 206
            [nombre] => Holiday Inn Express West Doral Miami Airport
            [precio] => 103.22
            [tipo] => hotelbeds
        )

    [5] => Array
        (
            [id] => 117
            [nombre] => Holiday Inn Express Miami International Airport
            [precio] => 106.3
            [tipo] => expedia
        )

    [6] => Array
        (
            [id] => 114
            [nombre] => Holiday Inn Express Miami Airport Doral Area
            [precio] => 113
            [tipo] => tourico
        )

    [7] => Array
        (
            [id] => 69
            [nombre] => Holiday Inn Express & Suites Kendall
            [precio] => 126.5
            [tipo] => expedia
        )

    [8] => Array
        (
            [id] => 62
            [nombre] => Holiday Inn Express & Suites Kendall East Miami
            [precio] => 128.46
            [tipo] => expedia
        )

    [9] => Array
        (
            [id] => 44
            [nombre] => W South Beach
            [precio] => 374.55
            [tipo] => tourico
        )

    [10] => Array
        (
            [id] => 275
            [nombre] => Westgate South Beach
            [precio] => 166.79
            [tipo] => hotelbeds
        )

    [11] => Array
        (
            [id] => 62
            [nombre] => Westin Colonnade Coral Gables
            [precio] => 138.39
            [tipo] => tourico
        )

    [12] => Array
        (
            [id] => 124
            [nombre] => Whitelaw Hotel
            [precio] => 132.04
            [tipo] => tourico
        )

    [13] => Array
        (
            [id] => 254
            [nombre] => Whitelaw Hotel
            [precio] => 142.29
            [tipo] => hotelbeds
        )

    [14] => Array
        (
            [id] => 178
            [nombre] => Z Ocean Hotel South Beach
            [precio] => 400.93
            [tipo] => expedia
        )

    [15] => Array
        (
            [id] => 240
            [nombre] => b2 Miami Downtown
            [precio] => 131.62
            [tipo] => hotelbeds
        )

    [16] => Array
        (
            [id] => 241
            [nombre] => b2 Miami Downtown
            [precio] => 131.62
            [tipo] => hotelbeds
        )

    [17] => Array
        (
            [id] => 46
            [nombre] => b2 miami downtown
            [precio] => 149.01
            [tipo] => expedia
        )

    [18] => Array
        (
            [id] => 242
            [nombre] => b2 Miami Downtown
            [precio] => 176.98
            [tipo] => hotelbeds
        )

)

正如你所看到的,"b2迈阿密市中心“应该在数组的顶部,而不是最后。

请帮个忙。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 14:16:59

来自PHP手册中的抽筋

请注意,此比较区分大小写。

字母a先于字母a。试一试斯特卡塞克。

编辑:即使使用strcasecmp,也要注意它的案例不敏感只适用于英文字符集。如果您在其他语言环境中使用名称(西班牙语、法语、德语,请将其命名),这些非基本的ASCII字符仍将以二进制方式进行比较。例如,

posada el Ñandú rengo不等同于posada el ñandÚ rengo。

在进行比较之前,您可能需要使用多字节字符串函数,如mb_convert_case或mb_strtolower。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17836518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档