我正在尝试将任何数组输出到目录列表格式。 A-Z正在工作,但我想将不以A-Z开头的单词输出到符号#。
E.G。 1234,#qwerty,!qwerty等应该排序到#group。
<?php
$aTest = array('apple', 'pineapple', 'banana', 'kiwi', 'pear', 'strawberry', '1234', '#qwerty', '!qwerty');
$range = range('A','Z');
$range[] = "#";
$output = array();
foreach($range AS $letters){
foreach($aTest AS $fruit){
if(ucfirst($fruit[0]) == $letters){
$output[$letters][] = ucfirst($fruit);
}
}
}
foreach($output AS $letter => $fruits){
echo $letter . "<br/>--------<br/>\n";
sort($fruits);
foreach($fruits AS $indFruit){
echo $indFruit . "<br/>\n";
}
echo "<br/>\n";
}
?>
答案 0 :(得分:1)
$output['#'] = array();
foreach($range as $letter){
$output[$letter] = array();
}
foreach($aTest AS $fruit){
$uc = ucfirst($fruit);
if(array_search($uc[0], $range) === FALSE){
$output['#'][] = $uc;
} else {
$output[$uc[0]][] = $uc;
}
}
注意我已经删除了外循环,因为你不需要它
答案 1 :(得分:1)
您应该颠倒两个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函数in_array
:
foreach($aTest as $fruit){
$first = ucfirst($fruit[0]);
if(in_array($first, $range)){
$output[$first][] = ucfirst($fruit);
}
else{
$output["#"][] = $fruit;
}
}
ksort($output);
答案 2 :(得分:0)
我首先使用ctype_alpha()
对它们进行分类,然后按数组键对结果进行排序:
$output = array();
foreach ($aTest as $word) {
$output[ctype_alpha($word[0]) ? strtoupper($word[0]) : '#'][] = $word;
}
ksort($output);