PHP无键名多维数组按指定索引实现不区分大小写排序方法
索引数组不区分大小写排序实现
无键名索引数组完全可以实现该需求,无需强制转换为键名数组,使用usort自定义比较规则即可,核心逻辑:
- 遍历外层数组的每一个子数组
- 对每个子数组调用
usort,比较时通过不区分大小写的字符串对比函数判断顺序
完整代码示例:
// 原始数组 $originalArr = [ ['space', 'Venus', 'NASA', 'apple'], ['link1', 'link2', 'link3', 'link4'] ]; // 遍历处理每个子数组 foreach ($originalArr as &$subArray) { usort($subArray, function($val1, $val2) { // 不区分大小写比较,如需自然排序(适配字符串内数字排序逻辑,如link1、link2...link10的正确顺序)替换为 strnatcasecmp // 如需降序排列,调换两个参数顺序即可:return strcasecmp($val2, $val1); return strcasecmp($val1, $val2); }); } unset($subArray); // 销毁引用,避免后续操作出现异常
执行后第一个子数组的排序结果和你给出的预期完全一致:['apple', 'NASA', 'space', 'Venus']。如果第二个子数组需要特殊排序规则(比如你示例中link4在前的顺序),调整比较函数的返回逻辑即可。
外层数组自定义键名修改方法
如果需要将外层数字索引替换为自定义键名,直接通过array_combine或者手动赋值即可实现:
// 方法1:手动映射,逻辑直观 $keyedArr = [ 'keywords' => $originalArr[0], 'links' => $originalArr[1] ]; // 方法2:使用array_combine批量映射,适合子数组数量较多的场景 $keyList = ['keywords', 'links']; $keyedArr = array_combine($keyList, $originalArr);
修改后的数组结构如下:
Array ( [keywords] => Array ( [0] => apple [1] => NASA [2] => space [3] => Venus ) [links] => Array ( [0] => link1 [1] => link2 [2] => link3 [3] => link4 ) )
补充说明:带字符串键名的数组排序逻辑和索引数组没有本质区别,排序时仅需要在比较函数中读取对应键名的值即可,实现难度和索引数组完全一致,不存在带键名数组排序更简便的情况。
内容的提问来源于stack exchange,提问作者Mark Garlick
相关产品推荐
相关产品推荐

