2012-02-01 8 views
1

私は表示する必要のある画像を持つデータベーステーブルを持っています。私の見解では、呼び出された結果ごとに最大10枚の画像を表示したいと思います。私は各結果の最大値として利用可能な20の画像を配列に設定しています(結果によっては画像がわずかしかなく、まったくないものもあります)。だから、配列の値が空であるかどうかを調べるループが必要です。配列の値が10であるか、配列の最後に到達するまで、次の値に移動するかどうかを調べる必要があります。phpどのように条件が満たされるまで配列をループする?

私がしなければならないことは、テストの結果から自分自身を2番目の配列にしてから、その配列を使ってイメージを表示するために通常のループを実行することです。何かのように

<?php 
    $p=array($img1, $img2.....$img20); 

    for($i=0; $i<= count($p); $i++) { 
    if(!empty($i[$p])) { 
    ...code 
    } 
    } 
?> 

空でない配列値を新しい配列に格納する方法を教えてください。

+2

。 –

+0

10枚の画像を出力するか、各アレイに10枚の画像を含む複数のアレイに分割しますか?それともあなたは何をしたいのですか? – Tom

+0

わずか10、複数の配列はありません。以下の解決策に取り組んでください。 – huzzah

答えて

2

ようにあなたが何かを行うことができます:私はあなたが `$ pを[$ i]は`なく `$ I [$ pを]`意味だと思う

$imgs = array(); $imgs_count = 0; 
foreach ($p as $img) { 
    if (!empty($img)) { 
     $imgs[] = $img; 
     $imgs_count++; 
    } 
    if ($imgs_count === 10) break; 
} 
+0

これは実際に私のために働いていますが、約半分の時間を除いて、私はこのひどいベーステーブルやビューが見つかりません....テーブルcloudmed.imagesは存在しません私の小さなデバッグページ(私は途中でCakephpを使用しています)。さらに悪いことに、私がページをリロードしようとすると、Google Chromeは私にページへのアクセスをブロックします:エラー139(net :: ERR_TEMPORARILY_THROTTLED):サーバーへのリクエストが一時的に抑制されました。私は間違って何をやっているのですか? – huzzah

+0

私のサーバーは私の上にうんざりしていると思います。ありがとうございました! – huzzah

+0

いいえ、それはまだ今日起こっています。誰でもこの機能で何が起こっているのかを知ることができますか? – huzzah

1
$new_array[] = $p[$i]; 

$new_arrayarray_push()a.k.a)の次の要素に$p[$i]を格納します。

2

array_filter()を呼び出して、配列から空でない要素だけを取得することができます。 array_filter()は、何を削除するかを決定するコールバック関数をとることができますが、この場合はempty()FALSEと評価され、コールバックは不要です。 empty() == TRUEと評価される値は、単に削除されます。

$p=array($img1, $img2.....$img20); 
$nonempty = array_filter($p); 

// $nonempty contains only the non-empty elements. 

// Now dow something with the non-empty array: 
foreach ($nonempty as $value) { 
    something(); 
} 

// Or use the first 10 values of $nonempty 
// I don't like this solution much.... 
$i = 0; 
foreach ($nonempty as $key=>$value) { 
    // do something with $nonempty[$key]; 
    $i++; 
    if ($i >= 10) break; 
} 

// OR, it could be done with array_values() to make sequential array keys: 
// This is a little nicer... 
$nonempty = array_values($nonempty); 
for ($i = 0; $i<10; $i++) { 
    // Bail out if we already read to the end... 
    if (!isset($nonempty[$i]) break; 

    // do something with $nonempty[$i] 
} 
+0

ありがとうございます!残念ながら、何らかの理由で空の値を保持しています。forループを使用すると、配列の最初の部分に10個未満のイメージがある場合、配列の最後の値に "未定義のオフセット"が与えられます($ p配列2つのテーブルの結果があります)。あなたはここに出力を見ることができます:http://rentcondos4less.cloudmedia.biz/lodgings/debug – huzzah

+0

@HeatherWalters私はちょうど上記の変更を加えました。配列から要素を削除した場合、対応するキーは必ずしも順次であるとは限りません。 –

+0

@felipelavinz上の私のコメントを参照してください、すべての上に、私はこの奇妙なサーバー要求を半分メッセージを抑制するメッセージを(私のコードを実装するとき.... – huzzah

1

探しているものかもしれない、あなたは、SQLクエリで検索結果を制限する考えたことはありますか?

select * from image where img != '' limit 10 

この方法では、空でない結果が常に10個まで与えられます。

関連する問題