У меня есть две записи в моей БД. Каждая запись имеет 6 полей (challengeId, partnerName, код, challengeTitle, описание, image_url). Я выбираю данное partnerName из просмотра родительской страницы, чтобы перейти к просмотру дочерней страницы.
Я использовал цикл foreach и у меня возникли проблемы. Теперь я вынул свой цикл foreach и заменил его <?php $challengename = $this->challengenames[$k] = current($this->challengenames); ?>
но теперь не удается заставить дочернюю страницу отображать значения для challengeTitle, которые соответствуют «partnerName», которое я выбрал на своей родительской странице. Он всегда предоставляет значение challengeTitle первой записи вместо текущей записи. Мне нужно знать, как изменить значение challengeTitle в зависимости от того, какое имя партнера я выбрал на своей родительской странице.
Исправит ли это цикл do while или оператор if в контроллере дочерней страницы исправит это?
Любой совет (и изменения кода) очень ценится.
public function viewChallengesAction(){
//get instance for request
$request = JO_Request::getInstance();
//get activated challenge names and set variables
$myChallenge=$this->getChallenge();
$this->view->challengenames = array();
foreach($myChallenge AS $k=>$challengename){
$this->view->challengenames[$k]['href'] = WM_Router::create($request->getBaseUrl() . '?module=challenges&controller=index&action=yourChallenge?code=' . $challengename['partnerName']);
$this->view->challengenames[$k]['partnerName'] = $challengename['partnerName'];
}
<div id="defaultcontainerwrapper" class="maxwidth">
<?php $challengename = $this->challenge; ?>
<header>
<h1>
<div class="list">
<span>Welcome to </span><?php echo $challengename['partnerName']; ?><span>'s Beat Waste Challenge!</span>
</div>
</h1>
</header>
<?php } ?>
</div>
public function yourChallengeAction(){
//get activated challenge names and set variables
$request = JO_Request::getInstance();
$myChallenge=$this->getChallenge();
$code = $request->getQuery("code");
$this->view->challengenames = array();
foreach($myChallenge AS $k=>$challengename){
if ($challengename['partnerName'] == $code)
{
$this->view->challenge = $challengename;
break;
}
}
Если вы не знаете ключ и хотите текущий элемент массива, вы можете использовать:
$challengename = current($this->challengenames);
Или первый элемент массива:
$challengename = reset($this->challengenames);
Или последний элемент массива:
$challengename = end($this->challengenames);
Просто обратите внимание, что end и reset изменят расположение указателя массива.
<?php $challengename = $this->challengenames[0] ?>
Вам не хватает последнего; попробуйте добавить его в агонию;
попробуйте ниже:
<?php $challengename = $this->challengenames[0]; ?>