2017-09-06 7 views
1

タイトルが無関係です。グループの配列はアルファベット順に表示されます。PHP(続き)

アルファベット順に配列をグループ化しようとしています。 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>"; 

私は、アルファベット以外の項目はグループ化になるだろうようなものを作りたいです個別に分離するのではなく一緒に


例:

「7トリック」及び「第3プラネット」は、非アルファベットとして一緒にグループ化の代わりに、それぞれ、「7」、「3」カテゴリの下に別々に表示ます。


どうすればいいですか?

+1

未処理の入力データ+試したコード+行き詰まった場所+お望みの出力を確認してください。ステートメントやリンクは誰にも役立たないでしょう。 –

+0

[アルファベット順PHPのグループ配列結果]の可能な複製(https://stackoverflow.com/questions/14210480/group-array-results-in-alphabetic-order-php) –

+0

関連性の高いコード拡張の候補あなたのケースに合わせて:https://stackoverflow.com/questions/43371496/group-array-elements-by-letter-range – mickmackusa

答えて

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

残りの部分は同じになるはずです。

+0

素晴らしい!セクシーな1ライナーで一日を節約!! XD – Leader

+0

アルファベット順のエントリはグループ化されません。アルファベット順のエントリはグループ化されているので、あなたが望むように見えます。 –

+1

@ScottCWilson私はOPがアルファベット以外のすべてのエントリを1つのグループにまとめるように求めていると思った。これはそうするべきです。 –

1

アルファを印刷した後、アレイからアルファを削除して表示します。

<?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

ありがとう、あなたのコードはきれいに働いた...しかし、他の答えはあまりにもセクシーです私のために... XD – Leader

関連する問題