2013-04-09 3 views
0

У меня возникла проблема при попытке представить некоторую информацию, поступающую из массива.Использование массива из Foreach в нескольких случаях

У меня есть foreach, который проверяет сеансы n на моем сайте, затем я вызываю базу данных для каждого сеанса и загружаю массив элементов.

После выхода из foreach, я хотел бы использовать тот же массив последовательно, чтобы показать элементы по одному заново, однако я вижу только последний из пунктов n раз.

По существу, во втором foreach, то $row2['name'] и $row2['price'] только показывает n количество раз, но всегда последний элемент таблицы.

foreach ($_SESSION['cart'] as $item) 
{ 
$pid = $item['itemId']; 
$q = $item['qty']; 
if($q==0) continue; 
$query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem"); 
$query2-> bindValue (':idItem',$pid); 
$query2->execute(); 
$row2 = $query2->fetch(PDO::FETCH_ASSOC); 
SOME HTML STUFF.... 
} 

НЕКОТОРЫХ НЕЗАВИСИМАЯ HTML STUFF ЗДЕСЬ:

foreach ($_SESSION['cart'] as $item)  
{ 
    $pid = $item['itemId']; 
    $q = $item['qty']; 
HTML <div class="subTotalItem"> 
    <span class='cartItemsText'><?php echo **$row2['name']**; ?></span> 
<span class='cartItemsText2'><?php echo $q." x "." $".$**row2['price'];** $subTotal+= $row2['price'] * $q; ?></span> 
    </div> 
} 

Любая идея, где проблема может быть?

+0

После того, как первый foreach завершает, строка $ row2 будет содержать строку, полученную из последнего запроса. Вам нужно либо снова запустить запросы, либо объединить петли foreach в один. – James

ответ

2

магазина ваши «вещи, чтобы показать позже» в строке и эхо его там, где вам нужно.

$subtotalStuff = ""; 

foreach ($_SESSION['cart'] as $item) { 
    $pid = $item['itemId']; 
    $q = $item['qty']; 
    if($q==0) continue; 

    $query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem"); 
    $query2-> bindValue (':idItem',$pid); 
    $query2->execute(); 
    $row2 = $query2->fetch(PDO::FETCH_ASSOC); 

    $subtotalStuff .= "<div class='subTotalItem'><span>" . $row2['name'] . "</span><span>" . $q . " x " . " $" . row2['price'] . "</span></div>\r\n"; 
    $subTotal+= $row2['price'] * $q; 

    SOME HTML STUFF.... 
} 

echo $subtotalStuff; 
echo $subTotal; 
+0

$ subtotalStuff - это то, что должно отображаться n раз с foreach, поэтому должно быть 2 foreach – samyb8

+0

$ subtotalStuff is конкатенация всех строк 'n', поэтому вам не нужно 2 foreach – James

0

Не выбран вариант по умолчанию для подготовленных операторов с PDO, настроенных как PDO :: ATTR_CURSOR => PDO :: CURSOR_FWDONLY? Если я прав, это означает, что вам придется снова запустить тот же запрос, чтобы составить HTML-часть вашего кода.

У меня нет опыта работы с реверсивными курсорами, но есть возможность для него.

0

Я могу только предположить, что вы каким-то образом установили переменную $ _SESSION ['cart'] где-то в вашем опущенном разделе «НЕКОТОРЫЕ HTML-СТУФЫ». Я говорю это, потому что, глядя на ваш код, я ожидал бы, что $ _SESSION ['cart'] будет иметь точные точные значения для второго foreach, как это было для первого foreach.

0

Вы должны распечатать в том же цикле, что и запрос, $ row2 сбрасывается каждый раз, когда он проходит цикл.

foreach ($_SESSION['cart'] as $item) 
{ 
$pid = $item['itemId']; 
$q = $item['qty']; 
if($q==0) continue; 
$query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem"); 
$query2-> bindValue (':idItem',$pid); 
$query2->execute(); 
$row2 = $query2->fetch(PDO::FETCH_ASSOC); 

SOME HTML STUFF.... 


Put your HTML output here, not in second loop 

} 

Это должно работать

+0

Это две отдельные области HTML страницы, мне нужно отделить предпросмотры, так как иначе мой html не будет правильно печатать – samyb8

Смежные вопросы