使用 SORT_STRING 标志对数组进行排序会导致注意:数组到字符串的转换

问题描述 投票:0回答:2

我的代码(PHP)

数组

switch (strtoupper($OBJType))
   {
    case "FILE" : 
         $SortWith = "A:";
         break;
    case "DIR" : 
         $SortWith = "B:";
         break;
    Default:
         $SortWith = "C:";
   }

$dirArray[] = array(
                    'SortBy' => $SortWith,
                    'Data' => $OBJ
                   );

我尝试对其进行排序

sort(($dirArray),SORT_STRING);

上面在错误日志文件中创建了“数组到字符串转换”通知。我尝试了以下方法,但我不确定它是否有效;该数组包含当前目录中的文件和目录的子列表。我希望所有文件都浮到顶部,目录位于底部。文件和目录名称应在返回列表中排序。我想我需要使用 array_multisort 但我无法弄清楚 - 任何帮助将不胜感激

php arrays sorting
2个回答
0
投票

好吧,经过一系列搜索并尝试理解我发现的内容之后。我用了这段代码。我认为它有效,但我必须进行更多测试。如果有更好/更简单的方法,我愿意接受建议......

//First Sort Item 
$SA1 = array();
foreach ($dirArray as $sVal) 
        {
          $SA1[] = $sVal['SortBy'];
        }  
//Second Sort Item      
$SA2 = array();
foreach ($dirArray as $dVal) 
        {
          $SA2[] = $dVal['Data'];
        } 
//print "<BR> SA1 "; print_r($SA1); print "<BR> SA2 "; print_r($SA2);
array_multisort($SA1,  SORT_ASC, SORT_STRING, $dirArray, $SA2,  SORT_ASC, SORT_STRING, $dirArray);

0
投票

必须在我的排序中添加忽略大小写。这是我最终得到的最终代码 - 我认为它有效。

$DSP = "&nbsp;&nbsp;";

foreach ($dirArray as $key => $row) 
        {
          $SK1[$key] = $row['SortBy'];
          //$SK2[$key] = StrToUpper($row['Data']);   //Don't need this if we use the SORT_FLAG_CASE option on array_multisort
          $SK2[$key] = $row['Data'];
        }       
//print "<BR><BR> Before Sort dirArray ";print_r($dirArray);print"<BR>";
//print "<BR>Sort Key: $DSP SK1 "; print_r($SK1); print "<BR>Sort Key: $DSP SK2 "; print_r($SK2);
// This sort is not CASELESS so "A" is not the same as "a"// array_multisort($SK1, SORT_ASC, $SK2, SORT_STRING, SORT_ASC, $dirArray);
array_multisort($SK1, SORT_ASC, $SK2, SORT_STRING|SORT_FLAG_CASE, SORT_ASC, $dirArray);
//print "<BR><BR> After Sort dirArray ";print_r($dirArray);print"<BR>";

感谢https://doc.bccnsoft.com/docs/php-docs-7-en/function.array-multisort.html帮助我理解

注意 array_multisort($SK1, SORT_ASC, $SK2, SORT_STRING|SORT_FLAG_CASE, SORT_ASC, $dirArray) 中的 |;

© www.soinside.com 2019 - 2024. All rights reserved.