SORT_FLAG_CASE标志出现问题

时间:2013-01-27 20:43:23

标签: php

我想做(像)二维数组,不区分大小写。

我有:

foreach ($rows as $key=>$row) { 
    $names[$key]=$row['Name']; 
} 

array_multisort($rows,SORT_STRING|SORT_FLAG_CASE,$names);

以上结果会产生相同的结果(有或没有大小写标志)。

盯着这个,外面有人的想法吗?

3 个答案:

答案 0 :(得分:1)

首先, SORT_FLAG_CASE 仅适用于PHP v5.4 +,因此我建议您检查您正在运行的PHP版本(如果5.3,可能需要“ uksort ” ISH)。

如果没有,请确保您输入的所有值 $ names 小写或大写。

您在 array_multisort 的调用中反对了 $ rows $ names 这些争论的顺序。

最后,如果它来自数据库(或某种其他方式,这意味着你无法在进入数组的途中更改数据),那么你可以使用 array_walk

希望有所帮助

答案 1 :(得分:0)

由于我使用PHP 5.3.16遇到了这个问题,我想我会分享我的简单解决方案:只需将密钥转换为较低(或较高)的情况,例如:

foreach ($rows as $key=>$row) { 
    $names[$key]=strtolower($row['Name']); 
} 

array_multisort($names,SORT_STRING,$rows);

我还换了$rows& $names并删除了SORT_FLAG_CASE(以删除日志消息)。

答案 2 :(得分:0)

您也可以在排序中进行排序,因此您可以使用usort与strcasecmp:

foreach ($rows as $key=>$row) { 
    $names[$key]=row['Name']; 
} 

array_multisort(usort($names,strcasecmp),$rows);