Задать вопрос
50VAJJ
@50VAJJ

Вытащить данные из массива без цикла?

Привет.
Есть массив articles(заголовок, текст, дата). Его я перебираю через
<?php foreach($articles as $v): ?>
                    <div class="title">
                        <p><?=$v["title"]; ?></p>
                    </div>
                    <div class="date">
                        <p><?=$v['date'] ?></p>
                    </div>
                    <div class="textFull">
                        <text>
                            <?=$v["text"] ?>
                        </text>
                    </div>
                </div>
            <?php endforeach; ?>

В конце файла(но это не важно).
А в head тегах(html) есть переменная $title, туда нужно передать что-то типа $articles["title"], но так не работает(ошибки нет, просто не извлекаются данные). Потом, как вы поняли я подключаю header.php и там <title><?=$title?></title>
Так как извлечь данные из массива без цикла? Так как делать цикл на всю страницу или два раза делать - не вариант.
  • Вопрос задан
  • 1294 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
gobananas
@gobananas
finishhim.ru
<title><?=$articles[0]["title"] ?></title>
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
gromdron
@gromdron
Работаю с Bitrix24
Снизу передать переменную наверх нельзя.
В Битриксе этот механизм называется "Отложенные функции" (погуглите на эту тему, там много чего расскажут).

Делается это так:

// Готовим значение titile по-умолчанию
$title = '';

// Начинаем буферизация
ob_start();
echo "<html><head><title>#title#</title></head>";

// получаем статьи
$articles = Model::GetArticles();

$iSetTitle = false;
foreach($articles as $v)
{
	if ( ! $iSetTitle ) 
	{
		$title = $v['title'];
		$iSetTitle = true;
	}
	echo '<div class="title"><p><?=$v["title"]; ?></p></div>';
	// вывод контента
}

$page = ob_get_clean();
echo str_replace('#title#',$title, $page);


Получается вы итерируетесь 1 раз и вытаскиваете все что нужно, но Вам нужно переделывать структуру Вашего приложения.
Ответ написан
djQuery
@djQuery
"Кодируем помаленьку" ("Сказка о Тройке")))
Как уже было справедливо замечено, переменные для вывода должны быть готовы до начала вывода. Можно обойтись без буферизации. В index.php:
<?php
session_start();
....
....
foreach($arr as $key=>$val(){
...
}
// Здесь у вас уже готов набор переменных из массива

?>
<!DOCTYPE html>
...
....
<title><?php echo $title; ?></title>
Ответ написан
Комментировать
@4iloveg
Full-Stack HTML Developer
Непонятно что у тебя за массив.
Там список материалов (articles)?
т.е.
$articles[0]["title"] == "Заголовок одного материала";
$articles[1]["title"] == "Заголовок другого материала";
Тогда непонятно какой из заголовков ты хочешь поместить в раздел head.

Либо у тебя просто кривой массив, и в $articles материал один, но содержится в [0] массиве, вместо того что бы находиться напрямую.
Если второй вариант, то сделай массив нормальным и тогда в самом верху страницы ты сможешь перебрать его (как уже написали тебе)
Или без перебора преобразовать значения в переменные этой функцией www.php.su/extract
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы