0

アイテムの配列があり、それらのアルファベット順のナビゲーションを生成しようとしています。

A|B|C|D|E|F|G|H など...

  • アップル
  • アプリコット
  • にんじん
  • キャメル

したがって、アルファベットのすべての文字をリストしたいのですが、配列内のアイテムが一致するものだけをリンクします。

これまでのところ、私は持っています:

$productArr = array('Apple','Apricot','Carrot','Camel','Dog');

$previous = null;
foreach(range('A','Z') as $alpha) {
    $arrayCount = count($productArr);
    for ($i=0; $i < $arrayCount; $i++) {
        $firstLetter    = $productArr[$i];
        if ($firstLetter[0] == $alpha && $firstLetter[0] != $previous){
            echo '<li><a href="#'.$alpha.'">'.$alpha.'</a></li>';
            $previous = $alpha;
        }elseif ($firstLetter[0] != $alpha && $alpha != $previous){
            echo '<li>'.$alpha.'</li>';
            $previous = $alpha;
        }
    }       
}

elseifをコメントアウトすると、elseifまで正常に動作し、リンクのリストが期待どおりに出力されます。アルファベットの残りの部分を印刷する方法を考え出す必要があります。

私がどこで間違っているのかについての助けをいただければ幸いです。

乾杯

4

4 に答える 4

1

秘訣は、elseif を内側のループの外に移動することだと思います。

<?php
$productArr = array('Apple','Apricot','Carrot','Camel','Dog', 'Rabbbit');

$previous = null;
foreach(range('A','Z') as $alpha) {
    $arrayCount = count($productArr);
    $printed = false;
    for ($i=0; $i < $arrayCount; $i++) {
        $firstLetter    = $productArr[$i];
        if ($firstLetter[0] == $alpha && $firstLetter[0] != $previous){
            echo '<li><a href="#'.$alpha.'">'.$alpha.'</a></li>';
            $previous = $alpha;
            $printed = true;
        } 
    }
    if($printed == false){
         echo '<li>'.$alpha.'</li>';
    }
}
?>
于 2013-08-23T06:33:06.933 に答える
0

あなたelseifはすべきではあり||ません&&

elseif ($firstLetter[0] == $alpha && $alpha != $previous){

デモhttp://phpfiddle.org/main/code/i2q-97d

于 2013-08-23T06:13:04.473 に答える
0

これが役に立つかもしれないことを確認してください

<?php
// define indexed array
$animals = array("wolf", "lion", "tiger", "iguana", "bear","zebra", "leopard");
// sort alphabetically by value
// result: ("bear", "iguana", "leopard", "lion", "tiger", "wolf","zebra")
sort($animals);
print_r($animals);
?>

そしてこれ:

$previous = null;
foreach($array as $value) {
    $firstLetter = substr($value, 0, 1);
    if($previous !== $firstLetter) echo "\n".$firstLetter."\n---\n\n";
    $previous = $firstLetter;

    echo $value."\n";
}
于 2013-08-23T06:13:18.227 に答える