我想做(像)二维数组,不区分大小写。
我有:
foreach ($rows as $key=>$row) {
$names[$key]=$row['Name'];
}
array_multisort($rows,SORT_STRING|SORT_FLAG_CASE,$names);
以上结果会产生相同的结果(有或没有大小写标志)。
盯着这个,外面有人的想法吗?
答案 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);