2012-02-01 4 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

вы могли бы сделать что-то вроде:

$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]; 

Сбережет $p[$i] в следующий элемент $new_array (a.k.a array_push()).

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 имеет результаты из двух таблиц). Вы можете посмотреть вывод здесь: http://rentcondos4less.cloudmedia.biz/lodgings/debug – huzzah

+0

@HeatherWalters Я только что сделал изменение выше. Забыл, что, если вы удалили элементы из массива, соответствующие ключи не обязательно будут последовательно. –

+0

Посмотрите мой комментарий выше на @felipelavinz, в довершение ко всему, я получаю этот странный запрос сервера с дросселированным сообщением в полтора раза, когда я реализую ваш код (а также его .... моя хостинговая компания отстойная? свет погас в Лос-Анджелесе?) – huzzah

1

Вы думали об ограничении результатов в запросе SQL?

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

Таким образом, вы всегда получаете до 10 результатов, которые не являются пустыми.