gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:51:20 28 4
gpt4 key购买 nike

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

$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/

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