0

abc ループに問題があります。文字列が一致する場合はハイパーリンクの間に埋め込みますが、ループされたアイテムを2回表示しないようにするにはどうすればよいでしょうか。

<?php
    foreach($this->data->lexikon_index() as $index){
        foreach ($abc as $letter){      
            echo '<li>';
            if ( $index->alpha == $letter ){
                echo "<a href=\"#{$index->alpha}\">{$index->alpha}</a>";
            } else {
                echo $letter;
            }

            echo '</li>';
        }

        $lexikon_content[] = $this->data->lexikon_content($index->alpha);
    }
    echo '</ul>';
?>
4

2 に答える 2

2

配列を使用して、既に使用した変数を格納します。次に使用します!in_array()

<?php
    unset($used);
    foreach ($this->data->lexikon_index() as $index) {
        foreach ($abc as $letter) {
            echo '<li>';
            if ($index -> alpha == $letter && !in_array($letter, $used)) {
                $used[] = $letter;
                echo "<a href=\"#{$index->alpha}\">{$index->alpha}</a>";
            } else {
                echo $letter;
            }
            echo '</li>';
        }
        $lexikon_content[] = $this -> data -> lexikon_content($index -> alpha);
    }
    echo '</ul>';
?>
于 2013-03-20T15:44:50.847 に答える
0

あなたのコードでは、多くのループを行っています。個人的に私はこれを試してみます(あなたのコードを正しく読めば):

<?php
    $lexikon_content = array();
    foreach ($this->data->lexikon_index() as $index) {        
        $lexikon_content[count($lexikon_content)] = $this -> data -> lexikon_content($index -> alpha);
    }
    foreach ($abc as $letter) {
        echo '<li>';
        if (in_array($letter, $lexikon_content)) {
            echo "<a href=\"#".$letter."\">".$letter."</a>";
        } else {
            echo $letter;
        }
        echo '</li>';
    }

    echo '</ul>';
?>
于 2013-03-20T16:03:13.473 に答える