You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定规则排序PHP数组并使用var_export()输出结果?

嘿,这个排序需求其实用PHP的自定义排序函数就能轻松搞定,我给你捋捋具体实现思路和代码:

完整实现代码
<?php
$array = ['hello', 'internet', 'people'];

usort($array, function($a, $b) {
    // 统计字符串中的元音字母数量(忽略大小写)
    $vowelCountA = preg_match_all('/[aeiou]/i', $a);
    $vowelCountB = preg_match_all('/[aeiou]/i', $b);
    
    // 规则1:优先按元音数量降序排列
    if ($vowelCountA !== $vowelCountB) {
        return $vowelCountB - $vowelCountA;
    }
    
    // 规则2:元音数量相同时,按反转后的字符串字典序升序排列
    $reversedA = strrev($a);
    $reversedB = strrev($b);
    return strcmp($reversedA, $reversedB);
});

var_export($array);
// 输出结果:array ( 0 => 'people', 1 => 'internet', 2 => 'hello', )
?>
代码逻辑拆解

1. 核心函数:usort()

PHP的usort()是自定义排序的核心,它允许我们传入一个回调函数,自己定义两个元素的比较规则,完美适配这个多条件排序的需求。

2. 统计元音字母数量

我用preg_match_all('/[aeiou]/i', $str)来统计每个字符串里的元音数:

  • 正则里的[aeiou]匹配所有小写元音,i标记忽略大小写,确保大写元音也能被统计
  • 比如people有3个元音(e、o、e),internet也是3个(i、e、e),hello是2个(e、o)

3. 实现规则1:元音数量降序

比较两个元素的元音数量,返回$vowelCountB - $vowelCountA:

  • 如果$vowelCountA小于$vowelCountB,返回正数,usort会把$b排在$a前面,刚好实现降序
  • 这样元音多的字符串会优先排在前面

4. 实现规则2:反转字符串后字典序升序

当两个字符串元音数量相同时:

  • 用strrev()把字符串反转,比如internet变成tenretni,people变成elpoep
  • 用strcmp()比较反转后的字符串,这个函数返回负数表示第一个参数字典序更小,usort会把它排在前面,刚好实现升序
  • 所以elpoep比tenretni字典序小,people就排在internet前面,和预期结果一致

运行这段代码后,var_export()输出的结果完全符合你的预期~

内容的提问来源于stack exchange,提问作者Marta Pascal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:11:55