Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按字母顺序排列的组数组结果(续)_Php_Foreach_Group By - Fatal编程技术网

Php 按字母顺序排列的组数组结果(续)

Php 按字母顺序排列的组数组结果(续),php,foreach,group-by,Php,Foreach,Group By,我为这个没有创意的标题感到抱歉 我正在尝试按字母顺序对数组进行分组。对我的任务有很大帮助,但我仍然想把事情做得更进一步 以下是我当前的代码: $records = ['7th Trick', 'Jukebox', 'Dynamyte', '3rd Planet']; $lastChar = ''; sort($records, SORT_STRING | SORT_FLAG_CASE); foreach($records as $val) { $char = strtolower($v

我为这个没有创意的标题感到抱歉

我正在尝试按字母顺序对数组进行分组。对我的任务有很大帮助,但我仍然想把事情做得更进一步

以下是我当前的代码:

$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>";
$records=['7th Trick','Jukebox','Dynamyte','3rd Planet'];
$lastChar='';
排序($records,sort_STRING | sort_FLAG_CASE);
foreach($记录为$val){
$char=strtolower($val[0]);
如果($char!=$lastChar){
如果($lastChar!='')回显“”;
回声“.strtoupper($char)。”
    “; $lastChar=$char; } 回音“
  • ”.$val.
  • ”; } 回声“
”;
我想让非字母项目组合在一起,而不是单独分开


示例:

“第七招”和“第三行星”按非字母顺序分组,而不是分别显示在“7”和“3”类别下



知道怎么做吗?

从阵列中移除字母,并在打印字母后显示它们

<?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>";
}

您只需在现有代码中添加一行即可完成此任务

$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) {

剩下的部分也应该是一样的。

用一些原始输入数据+代码+尝试的内容+卡住的地方+想要的输出+想要的内容来明确你的问题。语句和链接对任何人都没有帮助。可能重复相关的代码,并且是代码扩展的一个很好的候选项,以适合您的情况:谢谢您的回答,您的代码工作得很好。。。但另一个答案对我来说太性感了。。。太棒了!性感的一句话拯救了这一天!!XD但这不会将非字母项目分组,这似乎是您想要的,因为字母项目是分组的。@ScottCWilson我以为OP要求将所有非字母项目合并到一个组中。这应该可以做到,你是对的;我忽略了在他的代码中调用排序的事实。