#php #foreach #smarty #smarty3 #smarty2
#php #foreach #smarty #smarty3 #smarty2
Вопрос:
У меня есть следующий PHP-код.
$stmt = $pdo->prepare("SELECT * FROM memberships WHERE mb_status = 'enabled'");
$stmt-> execute();
$mbData = array();
while($f = $stmt->fetch()){
$mbData[] = $f;
$mbsId = $f['mb_id'];
$stmtUpg = $pdo->prepare("SELECT * FROM upgrade_validities WHERE upval_membership = :mbs");
$stmtUpg-> bindValue(':mbs', $mbsId);
$stmtUpg-> execute();
$upgVal = array();
while($uf = $stmtUpg->fetch()){
$upgVal[] = $uf;
}
}
$smarty->assign('mbData', $mbData);
$smarty->assign('upgVal', $upgVal);
Интеллектуальный код с использованием foreach
{foreach from=$mbData key=k item=b}
{$b.mb_name}
<!-- Listing Item -->
{foreach from=$upgVal key=k item=a}
<h3>Member Id: {$a.upval_id}</h3> // doesn't get displayed
{/foreach}
<!-- Listing Item / End -->
{/foreach}
Здесь идентификатор участника во вложенном цикле foreach не отображается. Я не знаю, какую ошибку я делаю.
Комментарии:
1. Вместо использования ‘{$a.upval_id}’ попробуйте использовать ‘{$a [«upval_id»]}’.
2. @CharlesEF прежде чем вы мне это порекомендуете, достаточно ли вы знакомы со smarty? Кроме того, это не сработало. Также, пожалуйста, обратите внимание, что если вложенный бит цикла for, похоже, работает, то даже если я не получу значение to
{$a.upval_id}
, я все равно получуMember Id:
текст в виде текста, отображаемого для количества отсчетов. Итак, здесь, кажется, может быть, моя логика цикла while имеет некоторые проблемы.3. Обычно лучше запускать запрос к базе данных внутри цикла. В этом случае вы можете легко выполнить один запрос, чтобы получить необходимую вам информацию.
4. @RedStar Entertainment О, извините, я не понимал, что смотрю на код smarty. Наверное, я перепутал его с PHP.
Ответ №1:
PHP:
$stmt = $pdo->prepare("SELECT * FROM memberships WHERE mb_status = 'enabled'");
$stmt-> execute();
$mbData = array();
while($f = $stmt->fetch()){
$mbData[] = $f;
$mbsId = $f['mb_id'];
$stmtUpg = $pdo->prepare("SELECT * FROM upgrade_validities WHERE upval_membership = :mbs");
$stmtUpg-> bindValue(':mbs', $mbsId);
$stmtUpg-> execute();
// change begin
$upgValTemp = array();
while($uf = $stmtUpg->fetch()){
$upgValTemp[] = $uf;
}
$upgVal[$mbsId] = $upgValTemp;
}
$smarty->assign('mbData', $mbData);
$smarty->assign('upgVal', $upgVal);
SMARTY:
{foreach from=$mbData key=k item=b}
{$b.mb_name}
<!-- Listing Item -->
{foreach from=$upgVal[$b.mb_id] key=k item=a} {* changed here *}
<h3>Member Id: {$a.upval_id}</h3>
{/foreach}
<!-- Listing Item / End -->
{/foreach}
Комментарии:
1. добро пожаловать 🙂 было бы неплохо, если бы вы отметили как принятый ответ 🙂