2

foreach を循環してこのデータをクエリに解析する前に、2 つの異なるテーブルからの情報に基づいて API からデータを抽出しようとしています。探している正確なデータ (配列内の最初の映画の名前とポスター) を取得する一連のクエリを作成しましたが、このデータを一連の映画のリストを返す foreach に解析すると、私が事前定義した変数は、期待どおりにすべてを循環するのではなく、配列内の最終リストに戻されるだけです。

ここに私がこれまでに持っているものがあります:

処理:

// Get a user's Watchlists from the watchlists table
    $query = "SELECT * FROM watchlists WHERE user_id = " . $profile_info['id']; 
    $watchlist_result = mysql_query($query);
    $watchlists = array();
    while(($row = mysql_fetch_assoc($watchlist_result))) {
        $watchlists[] = $row;
    }

    // Count how many Watchlists a user has
    $watchlist_count = count($watchlists);

    // Echo details of each Watchlist
    echo "<pre>";
    print_r($watchlists);
    echo "</pre>";

    // For each Watchlist, select all of the films it contains and echo them out
    foreach ($watchlists as $key => $films) {
        // Get each Watchlist's ID from the watchlists table
        $watchlist_id = $films['watchlist_id'];
        echo "<pre>";
        print_r($watchlist_id);
        echo "</pre>";

        // Extract films from the watchlist_films table for each Watchlist, based on its unique ID and put them into an array
        $watchlist_film_query = "SELECT * FROM watchlist_films WHERE watchlist_id = " . $watchlist_id;
        $watchlist_film_result = mysql_query($watchlist_film_query);
        $watchlist_films = array();
        while(($row = mysql_fetch_assoc($watchlist_film_result))) {
            $watchlist_films[] = $row;
        }

        // Echo the new array
        echo "<pre>";
        print_r($watchlist_films);
        echo "</pre>";

        // Get the ID of the first film in each Watchlist
        $rt_id = $watchlist_films[0]['film_id'];

        // Echo the ID
        echo "<pre>";
        print_r($rt_id);
        echo "</pre>";

        // Initialise Rotten Tomates API
        include_once('/api/RottenTomatoes.php');

        /* Rotten Tomatoes */
        $rottenTomatoes = new RottenTomatoes('2b2cqfxyazbbmj55bq4uhebs', 10, 'uk');

        // Search Rotten Tomatoes for details on the first film in the array
        $rottenTomatoes->movieSearch($rt_id);

        //echo "<pre>";
        try {
            $result = $rottenTomatoes->getMovieInfo($rt_id);
            //print_r($result);
        } catch (Exception $e) {
            //print_r($e);
        }
        //echo "</pre>";

        // Get poster and name of first movie in array
        $thumbnail = $result['posters']['thumbnail'];
        $first_film_name = $result['title'];

        echo "<pre>";
        print_r($thumbnail);
        echo "</pre>";

        echo "<pre>";
        print_r($first_film_name);
        echo "</pre>";
    }

ここで、この情報を実際のページに解析し、ユーザーが持っている各ウォッチリストのすべての情報を出力したいと考えています。

出力:

if ($watchlist_count != 0) {?>
                        <ul class="unstyled"><?php
                            foreach($watchlists as $key => $watchlist_item) {?>
                                <li class="well list-item clearfix"><?php

                                    echo "<pre>";
                                    print_r($watchlist_item);
                                    echo "</pre>";

                                    echo "<pre>";
                                    print_r($watchlist_films);
                                    echo "</pre>";

                                    echo "<pre>";
                                    print_r($watchlist_id);
                                    echo "</pre>";

                                    echo "<pre>";
                                    print_r($thumbnail);
                                    echo "</pre>";

                                    echo "<pre>";
                                    print_r($first_film_name);
                                    echo "</pre>";?>

                                    <div class="row-fluid">
                                        <a href="watchlist.php?id=<?php echo $watchlist_item['watchlist_id']; ?>" title="<?php echo $watchlist_item['name']; ?> Watchlist">
                                            <img src="<?php echo $thumbnail; ?>" class="span1 pull-left" alt="<?php echo $first_film_name; ?> poster" title="<?php echo $first_film_name; ?> poster" />
                                        </a>

                                        <div class="span11 movie-info">
                                            <p class="search-title"><a href="watchlist.php?id=<?php echo $watchlist_item['watchlist_id']; ?>" title="<?php echo $watchlist_item['name']; ?> Watchlist"><?php echo $watchlist_item['name']; ?></a></p>

                                            <p class="search-synopsis"><?php echo $watchlist_item['description']; ?></p>
                                        </div>
                                    </div>

                                </li><?php
                            }?>
                        </ul><?php
                    } else {?>
                        <div class="well list-item">
                            You haven't created any Watchlists yet! Why not visit a movie page now and build your first?
                        </div><?php
                    }?>

私が抱えている問題は、処理セクションが私が望むもの (つまり、各ウォッチリストの最初の映画の名前とサムネイル) を正確に取得する一方で、この情報を出力に解析すると、名前とポスターのみが出力されることです。以下のように、最後のウォッチリストの最初の映画が表示されます。

結果

4

1 に答える 1

1

処理中に を上書きし$watchlist_films、foreach の各ループで、最後の実行のデータのみを取得します。$thumbnail$first_film_name

たとえば、次のような foreach ループの最後に、データをメイン配列に戻す必要があります。

$films['watchlist_films']=$watchlist_films;
$films['thumbnail']=$thumbnail;
$films['first_film_name']=$first_film_name;

出力では、次のようなデータにアクセスできます。

$watchlist_item['thumbnail'];
$watchlist_item['first_film_name'];

したがって、処理は次のようになります (短縮):

$query = "SELECT * FROM watchlists WHERE user_id = " . $profile_info['id']; 
$watchlist_result = mysql_query($query);
$watchlists = array();
while(($row = mysql_fetch_assoc($watchlist_result))) {
    $watchlists[] = $row;
}

// For each Watchlist, select all of the films it contains and echo them out
foreach ($watchlists as $key => $films) {
    $watchlist_film_query = "SELECT * FROM watchlist_films WHERE watchlist_id = " . $films['watchlist_id'];
    $watchlist_film_result = mysql_query($watchlist_film_query);
    $watchlist_films = array();

    //You don't need to load all data if you only want the first one:)
    $row = mysql_fetch_assoc($watchlist_film_result)
    $rt_id = $row['film_id'];

    // Initialise Rotten Tomates API
    include_once('/api/RottenTomatoes.php');

    /////Rotten Tomato Call /////
    //===> Rotten Tomatoe API call code goes here <=== //

    //You don't really need the whole films list
    //$films['watchlist_films']=$watchlist_films;
    $films['thumbnail']=$result['posters']['thumbnail'];
    $films['first_film_name']=$result['title'];
}

そして出力:

if (count($watchlists)> 0) {?>
                    <ul class="unstyled"><?php
                        foreach($watchlists as $key => $watchlist_item) {?>
                            <li class="well list-item clearfix"><?php

                                <div class="row-fluid">
                                    <a href="watchlist.php?id=<?php echo $watchlist_item['watchlist_id']; ?>" title="<?php echo $watchlist_item['name']; ?> Watchlist">
                                        <img src="<?php echo $watchlist_item['thumbnail']; ?>" class="span1 pull-left" alt="<?php echo $first_film_name; ?> poster" title="<?php echo $watchlist_item['first_film_name']; ?> poster" />
                                    </a>

                                    <div class="span11 movie-info">
                                        <p class="search-title"><a href="watchlist.php?id=<?php echo $watchlist_item['watchlist_id']; ?>" title="<?php echo $watchlist_item['name']; ?> Watchlist"><?php echo $watchlist_item['name']; ?></a></p>

                                        <p class="search-synopsis"><?php echo $watchlist_item['description']; ?></p>
                                    </div>
                                </div>

                            </li><?php
                        }?>
                    </ul><?php
                } else {?>
                    <div class="well list-item">
                        You haven't created any Watchlists yet! Why not visit a movie page now and build your first?
                    </div><?php
                }?>

すべてテストされていません;-)

于 2013-03-25T19:34:52.447 に答える