0

while ループの中に foreach ループがあります。$i と $i++ を使用して反復する限り、標準のセットアップを使用しています。これは私のコードです(短縮):

// Get a database object
$db = JFactory::getDBO();
date_default_timezone_set("America/Chicago");
$month = date('n');
$day = date('j');
$year = date('Y');

$currentDay = $month.'/'.$day.'/'.$year;
//echo $currentDay;

// create the list of accessories
$i = 0;
while($i < 20) {

    $yesterday = strtotime ( "-$i days" , strtotime ( $currentDay ) ) ;
    $yesterday = date ( 'n/j/Y' , $yesterday );

    $query = "SELECT * FROM #__cappz_homelinks WHERE date='{$yesterday}' ORDER BY id ASC";
    // Executes the current SQL query string.
    $db->setQuery($query);
    // returns the array of database objects
    $list = $db->loadObjectList();

    if($list[0]->date) {//if there's a date
        echo '<h2>';
        echo $yesterday;
        echo '</h2>';

        echo '<ul>';
        foreach ($list as $item) {
            echo '<li>';
            echo '<a target="_blank" href="'.$item->url.'">'.$item->headline.$i.'</a>';
            echo '</li>';
            $i++;
        }
        echo '</ul>';
    }
}

foreach ループの実行時に $i (foreach ループ内) をインクリメントしようとしていますが、PHP スクリプトがタイムアウトします。$i++ を foreach の外に移動すると、正常に動作します...しかし、もちろんそれは私が必要とするものではありません。

編集私は完全なコードを投稿しました。Joomla データベース オブジェクトを使用して接続しています。

4

1 に答える 1

3

これは、ループやカウンターの代わりに SQL LIMIT を使用して、リストを 20 アイテムに制限する方法です。

// Get a database object
$db = JFactory::getDBO();
date_default_timezone_set("America/Chicago");
$month = date('n');
$day = date('j');
$year = date('Y');

$currentDay = $month.'/'.$day.'/'.$year;
//echo $currentDay;

// create the list of accessories

$yesterday = strtotime ( "-$i days" , strtotime ( $currentDay ) ) ;
$yesterday = date ( 'n/j/Y' , $yesterday );

$query = "SELECT * FROM #__cappz_homelinks WHERE date='{$yesterday}' ORDER BY id ASC LIMIT 20";
// Executes the current SQL query string.
$db->setQuery($query);
// returns the array of database objects
$list = $db->loadObjectList();

if(count($list)>0 && $list[0]->date/*not sure if this is needed*/) {//if there's a date
        echo '<h2>';
        echo $yesterday;
        echo '</h2>';

        echo '<ul>';
        foreach ($list as $item) {
            echo '<li>';
            echo '<a target="_blank" href="'.$item->url.'">'.$item->headline.$i.'</a>';
            echo '</li>';
        }
        echo '</ul>';
}
于 2013-04-25T06:43:01.403 に答える