нужна помощь с циклами массивов php-шаблонов

  • Автор темы -Woland-
  • 70
  • Обновлено
  • 17, May 2024
  • #1
Может ли кто-нибудь помочь мне с этим? Я пытаюсь перебрать массивы, чтобы поместить их в шаблон и показать несколько сообщений на странице, используя этот шаблон.

Но я не могу заставить это работать и не знаю почему.

Я новичок в ООП и не до конца его понимаю.

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

вот о чем я говорю: из этого класса: https://github.com/isRuslan/php-template

Я не могу заставить эту часть работать в шаблоне
 
$names = array('test1', 'test2', 'test3');
$names2 = array('test2 1', 'test2 2', 'test2 3');

$template->assign('people', array(

array('name' => $names),

array('name2' => $names2)
));

PHP: Я пытаюсь использовать это для отображения массивов, извлеченных из базы данных, и теперь мне повезло.
  $template->assign('items', array( array('name' => 'First'), array('name' => 'Second') )); 
PHP: любая помощь....пожалуйста.

-Woland-


Рег
25 Jan, 2012

Тем
3

Постов
8

Баллов
38
  • 01, Jun 2024
  • #2
Слишком много обдумываю.

При работе с PHP следует помнить одну вещь: «да, у нас есть для этого функция». В этом случае вам, скорее всего, следует использовать «array_map». Кроме того, сейчас 2020 год, а не 2005 год, хватит говорить «массив» все это время.
 

$names = ['Bob', 'Ralph', 'Mike'];

$ranks = ['Col.', 'Gen.', 'Adm.'];

$template_array = [];

foreach ($names as $index => $name) $template_array[] = [

'NAME' => $name,

'RANK' => $ranks[$index]

];

$template->assign('people', $template_array);
Код (разметка): Вы могли бы даже подумать об отказе от «переменной даром» в последних двух строках и просто:
  <?php $names = [ 'Bob', 'Ralph', 'Mike' ]; $ranks = [ 'Col.', 'Gen.', 'Adm.' ]; $template->assign('people', array_map(function($a, $b) { return [ 'NAME' => $a, 'RANK' => $b ]; }, $names, $ranks)); 
Код (разметка): если вы не планируете повторно использовать массив позже на своей странице. Возможно, даже стоит использовать анонимную функцию.
  $template->assign('people', array_map('nameRankPair', $names, $ranks)); 


Код (разметка): хотя мне это не нравится из-за недостаточной ясности кода, это тоже правильный подход.

Единственное преимущество, которое дает подход «пока», заключается в том, что он МОЖЕТ работать быстрее, поскольку не задействованы накладные расходы на вызовы функций, но на самом деле вам было бы лучше использовать FOREACH, если бы это было так, и оптимизация скорости была важна.

  $names = [ 'Bob', 'Ralph', 'Mike' ]; $ranks = [ 'Col.', 'Gen.', 'Adm.' ]; function nameRankPair($a, $b) { return [ 'NAME' => $a, 'RANK' => $b ]; } $template_array = array_map('nameRankPair', $names, $ranks); $template->assign('people', $template_array); 
Код (разметка): Вероятно, это будет самый быстрый из возможных подходов.
 

rocksttr1


Рег
08 Jan, 2013

Тем
1

Постов
2

Баллов
12
  • 12, Jun 2024
  • #3
неважно, кто-то помог мне добраться туда. кому интересно:
 $names = array('Bob', 'Ralph', 'Mike');

$names2 = array('Col.', 'Gen.', 'Adm.');

$i = 0;

$template_array = array();

while($i < 3)

{

$template_array[] = array('NAME' => $names[$i], 'RANK' => $names2[$i]);

$i++;

}

$template->assign('people', $template_array);
PHP:
 

legionergry


Рег
13 Sep, 2011

Тем
1

Постов
2

Баллов
12
Тем
49554
Комментарии
57426
Опыт
552966

Интересно