我的代码(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 但我无法弄清楚 - 任何帮助将不胜感激
好吧,经过一系列搜索并尝试理解我发现的内容之后。我用了这段代码。我认为它有效,但我必须进行更多测试。如果有更好/更简单的方法,我愿意接受建议......
//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);
必须在我的排序中添加忽略大小写。这是我最终得到的最终代码 - 我认为它有效。
$DSP = " ";
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) 中的 |;