组数组结果以字母顺序PHP(续)

时间:2017-09-06 13:21:20

标签: php foreach group-by

我很抱歉没有创造性的头衔。

我试图按字母顺序对数组进行分组。 The accepted answer in this question (by Hugo Delsing)对我的任务有很大的帮助,但我仍然希望进一步采取行动......

这是我目前的代码:

$records = ['7th Trick', 'Jukebox', 'Dynamyte', '3rd Planet'];
$lastChar = '';
sort($records, SORT_STRING | SORT_FLAG_CASE);

foreach($records as $val) {
    $char = strtolower($val[0]);

    if ($char !== $lastChar) {
        if ($lastChar !== '') echo "</ul>";

        echo "<h2>".strtoupper($char)."</h2><ul>";
        $lastChar = $char;
    }

    echo '<li>'.$val.'</li>';

}
echo "</ul>";

我想制作一些东西,以便将非字母项目组合在一起而不是单独分开。

示例:

&#34; 7th Trick&#34;和#34;第三星球&#34;汇总为非字母,而不是单独显示在&#34; 7&#34;和&#34; 3&#34;分类。

任何想法怎么做?

2 个答案:

答案 0 :(得分:1)

从数组中删除alpha并在打印alphas后显示它们。

<?php
$records = ['7th Trick', 'Jukebox', 'Dynamyte', '3rd Planet'];
$lastChar = '';
sort($records, SORT_STRING | SORT_FLAG_CASE);

$alpha = array();
$non_alpha = array(); 
foreach($records as $val) {
   if (ctype_alpha($val[0])) {
      $alpha[] = $val; 
   } else { 
      $non_alpha[] = $val; 
   }
}
foreach($alpha as $val) {
    $char = strtolower($val[0]);

    if ($char !== $lastChar) {
        if ($lastChar !== '') echo "</ul>";

        echo "<h2>".strtoupper($char)."</h2><ul>";
        $lastChar = $char;
    }

    echo '<li>'.$val.'</li>';

}
echo "</ul>";
if (sizeof($non_alpha) > 0) { 
   echo "<h2>Digits</h2><ul>";
   foreach ($non_alpha as $val) { 
      echo '<li>'.$val.'</li>';
   } 
   echo "</ul>";
}

答案 1 :(得分:1)

您只需在现有代码中添加一行即可完成此操作。

$char = strtolower($val[0]);

// Convert $char to one value if it isn't a letter
if (!ctype_alpha($char)) $char = 'Non-alphabetic';

if ($char !== $lastChar) {

其余的应该是一样的。