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

  • Автор темы I AM
  • Обновлено
  • 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: любая помощь....пожалуйста.

I AM


Рег
23 Jul, 2011

Тем
403760

Постов
400028

Баллов
2418908
  • 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

Тем
69

Постов
201

Баллов
576
  • 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

Тем
72

Постов
209

Баллов
569
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно