PHP,用一个带字母的数组按字母顺序排序

标签 php

我有一个代码需要按字母顺序排序,不是普通字母,而是指定的。我们可以在下面看到:

$alphabetArray = ['t','w','h','z','k','d','f','v','c','j','x','l','r','n','q','m','g','p','s','b'];
我有这个带有这些字母的数组,我需要按这些字母对其他数组进行排序,在另一个数组中我有这个:
$wordsArray = [ "jhona", "eric", "caio", "noah ];
在正常的字母表中是 A B C D E F G H ..
但在这个练习中,我需要像 T W H Z K D F V C J X L R N Q M G P S B 这样的排序
任何人都可以帮助我,我尝试排序功能,但不知道如何做到这一点。

最佳答案

使用 Array#usort用于用户定义的带有回调的排序。
注意:必须使用use有权访问 $alphabetArray在回调中。
说明: usort采用 2 个参数:首先是用于排序的数组,其次是用于比较数组的 2 个元素的回调函数。对于这个回调,我使用了一个带有 2 个参数的匿名函数(我使用 $a$b ,但你可以在这里使用你想要的)。因为我需要$alphabetArray在这个函数中并且不能为此使用第三个参数我使用了 use在函数内部访问这个全局变量。
为了进行比较,编译器将数组中的 2 个值与此回调进行比较,并按返回值对它们进行排序:

  • $a < $b 需要 -1(或任何其他负值)
  • $a = $b 需要 0
  • $a > $b 需要 +1(或任何其他正值)

  • 2个值的比较如下:
  • 如果一个值具有较小/较大的值(按照 $alphabetArray 中表示的字母顺序),则查找第一个字符(从左侧开始)。
  • 如果是,则返回所需的返回值 -1/+1。
  • 否则继续下一个字符。
  • 如果一个字符串比另一个字符串短,则停止并在两个值相等时返回 0。
  • 否则返回 -1/+1 以便较短的字符串将在另一个之前排序。

  • 在这里玩http://sandbox.onlinephpfunctions.com/code/06c40db2ce233494df533fc5f1842d27f94ed003
    $alphabetArray = ['t','w','h','z','k','d','f','v','c','j','x','l','r','n','q','m','g','p','s','b'];
    $wordsArray = [ "jhona", "eric", "caio", "noah", "noaht", "caxa", "caa" ];
    
    usort($wordsArray, function($a,$b) use($alphabetArray) {
        $len = min(strlen($a), strlen($b));
        for ($i=0; $i<$len; $i++) {
            $aa = array_search($a[$i], $alphabetArray);
            $bb = array_search($b[$i], $alphabetArray);
            if ($aa < $bb) return -1;
            elseif ($aa > $bb) return 1;
        }
        if (strlen($a)===strlen($b)) return 0;
        else return (strlen($a) - strlen($b));
    });
    
    print_r($wordsArray);
    

    关于PHP,用一个带字母的数组按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64087337/

    相关文章:

    php - NetSuite - 通过客户内部 ID 获取交易 (SO)

    php - 创建挑战响应登录

    Javascript 不响应点击事件 [Laravel 5.5]

    php - WordPress:<主体类 ="customize-support">

    php - 有什么方法可以避免为非面向对象的应用程序加载未使用的类?

    javascript - 从 Angular 范围的 php 文件中获取 json 数据

    php - 在 PHP 中从 mysql 检索图像时无法查看图像

    php - 插入两个不同的表

    javascript - 表单提交后加载CSS模态

    php - Laravel - 在登录时销毁现有 session