PHP insenstivite multisort

I'm using this function to sort my multidimensional array:

function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
    $sort_col = array();
    foreach ($arr as $key=> $row) {
        $sort_col[$key] = $row[$col];
    }

    array_multisort($sort_col, $dir, $arr);
}

and then call it for example like this:

array_sort_by_column($items, 'name', SORT_DESC);

Now the sorting in general works, but there is one problem: It's case sensitive, so if I have a list of :

  • apple
  • orange
  • Pear
  • Banana

the banana wouldn't come to the second place of the list (or array), but instead to the first place, so first, there are the words with starting capital letters, and then the other ones.

So expected behaviour of the list above would be

  • apple
  • Banana
  • orange
  • Pear

Actual output is:

  • Banana
  • Pear
  • apple
  • orange

What can I change to do this not case sensitive?

展开翻译

译文

我正在使用此函数对多维数组进行排序:</ p>

 <  code> function array_sort_by_column(&amp; $ arr,$ col,$ dir = SORT_ASC){
$ sort_col = array();
foreach($ arr as $ key =&gt; $ row){
$ sort_col [$ key] = $ row [$ col];
}

array_multisort($ sort_col,$ dir,$ arr);
}
</ code> </ pre>

和 然后调用它,例如:</ p>

  array_sort_by_column($ items,'name',SORT_DESC); 
</ code> </ pre>

现在排序一般有效,但有一个问题:它区分大小写,所以如果我有一个列表:</ p>


  • apple </ li>
    < li> orange </ li>
  • Pear </ li>
  • Banana </ li>
    </ ul>

    香蕉不会排在第二位 列表(或数组),而不是第一个,所以首先,有大写字母,然后是其他的。</ p>

    所以列表的预期行为 上面将是</ p>


    • apple </ li>
    • Banana </ li>
    • oran ge </ li>
    • 梨子</ li>
      </ ul>

      实际输出是:</ p>


      • 香蕉< / li>
      • Pear </ li>
      • apple </ li>
      • orange </ li>
        </ ul>

        我可以更改什么? 这样做不区分大小写?</ p>
        </ div>

dsdsm2016
dsdsm2016 Case的可能重复使用array_multisort()对多维PHP数组进行不敏感排序
大约 2 年之前 回复

1个回答

This should do:

array_multisort($sort_col, $dir|SORT_NATURAL|SORT_FLAG_CASE, $arr);

From php docs:

SORT_FLAG_CASE - can be combined (bitwise OR) with SORT_STRING or SORT_NATURAL to sort strings case-insensitively

展开翻译

译文



这应该这样做:</ p>

array_multisort($ sort_col,$ dir | SORT_NATURAL | SORT_FLAG_CASE,$ arr); </ code> </ p>

来自php docs:</ p>


SORT_FLAG_CASE - 可以组合(按位OR) 使用SORT_STRING或
SORT_NATURAL对字符串进行不区分大小写的排序</ p>
</ blockquote>
</ div>

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!