0

2 人のユーザーの本のライブラリを比較しようとしています。別のユーザーのライブラリを表示しています。現在のユーザーが自分のライブラリにもその本を持っている場合は、その本の下に「Ping」へのリンクを表示したいと思います。関連するコントローラーコードは次のとおりです。

function other_user_library()
{
    $this->load->model('user_library_model');
    $this->load->model('user_information_model');
    $data['other_user_library']=$this->user_library_model->other_user_library($username);
    $data['my_book']=$this->user_library_model->compare_libraries();

    $this->load->view('other_user_library', $data);
}

モデルは次のとおりです。

function other_user_library($username)
{
    $this->load->database();

    $this->db->select('*');
    //rest of query to display all of other user's books

    $query= $this->db->get();
    return $query->result();    
}
function compare_libraries()
{
    $this->load->database();

    $this->db->select('BOOK.isbn');
    //rest of query to return the current user's list of isbns in his library

    $query= $this->db->get();
    return $query->result();    
}

関連する View コードは次のとおりです。

<?php foreach ($other_user_library as $row) :?>
<?php if($row->isbn)
    {
       foreach ($my_book as $thing):
       if($thing->isbn ==$row->isbn)
       {
           $ping = TRUE;
           if($ping)
           {
             echo anchor('Ping');
           } 
       }
       else
       {
          echo "somethingelse";
       }
       endforeach;  
       }?>              
   <?php endforeach;?>

現状では、8 冊の本を持っているユーザーの場合、そのうちの 1 冊が他のユーザーのライブラリの本と一致する場合、これは "somethingelse" を 7 回表示し、次に "Ping" リンクを 1 回表示します。8つのisbnを通過し、そのうちの1つが一致することを確認してから、「Ping」リンクを表示するだけの方法があるかどうか疑問に思っています。else{echo "somethingelse";} 行を削除してみました。そして、一致する本の「Ping」だけが表示されます。ただし、空白のままにするのではなく、一致しない本の下に何か他のものを配置できるようにしたいと考えています。ありがとうございました!

4

1 に答える 1

0

私はあなたのコード全体をたどることができません。しかし、明らかな変更が必要と思われる箇所には変更を加えました。試してみる。

 <?php foreach ($other_user_library as $row) : ?>
        <?php
         $ping = FALSE; //set ping here
        if ($row->isbn) {


            foreach ($my_book as $thing):
                if ($thing->isbn == $row->isbn) {
                    $ping = true;
                    break; //prevents the continuous loop after a match incase you have thousands of rows
                }

            endforeach;

            if ($ping) { //Do the echo after this point to have just one echo. You could still move out of the parent foreach loop as long as $ping is defined first.
                echo anchor('Ping');
            } else {
                echo "somethingelse";
            }
        }
        ?>              
    <?php endforeach; ?>
于 2013-02-25T22:39:52.447 に答える