Php 以A-Z格式输出,并在列表中输出非A-Z字符

Php 以A-Z格式输出,并在列表中输出非A-Z字符,php,Php,我正在尝试将任何数组输出为目录列表格式。 A-Z正在工作,但我想将不以A-Z开头的单词输出到符号# 例如1234,#qwerty!qwerty等应归入#组 请注意,我已经删除了外部循环,因为您不需要它您应该颠倒两个foreach循环的顺序,使用break和一个临时变量: foreach($aTest as $fruit){ $temp = 1; foreach($range as $letters){ if(ucfirst($fruit[0]) == $letters

我正在尝试将任何数组输出为目录列表格式。 A-Z正在工作,但我想将不以A-Z开头的单词输出到符号#

例如1234,#qwerty!qwerty等应归入#组



请注意,我已经删除了外部循环,因为您不需要它

您应该颠倒两个
foreach
循环的顺序,使用
break
和一个临时变量:

foreach($aTest as $fruit){
$temp = 1;
    foreach($range as $letters){
        if(ucfirst($fruit[0]) == $letters){
            $output[$letters][] = ucfirst($fruit);
            $temp = 0;
            break;
        }
    }
    if($temp){
        $output["#"][] = $fruit;
    }
}

ksort($output);
为了避免这些复杂情况,您可以只使用一个
foreach
循环和内置PHP函数:


我将首先使用数组键对它们进行分类,然后按数组键对结果进行排序:

$output = array();

foreach ($aTest as $word) {
        $output[ctype_alpha($word[0]) ? strtoupper($word[0]) : '#'][] = $word;
}

ksort($output);

嗨,谢谢你的帮助。字母不再按A-Z顺序排序。我怎样才能让他们这样:#A B C D等
foreach($aTest as $fruit){
$temp = 1;
    foreach($range as $letters){
        if(ucfirst($fruit[0]) == $letters){
            $output[$letters][] = ucfirst($fruit);
            $temp = 0;
            break;
        }
    }
    if($temp){
        $output["#"][] = $fruit;
    }
}

ksort($output);
foreach($aTest as $fruit){
$first = ucfirst($fruit[0]);
    if(in_array($first, $range)){
        $output[$first][] = ucfirst($fruit);
    }
    else{
        $output["#"][] = $fruit;
    }
}

ksort($output);
$output = array();

foreach ($aTest as $word) {
        $output[ctype_alpha($word[0]) ? strtoupper($word[0]) : '#'][] = $word;
}

ksort($output);