Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как перечислить ID через запятую?

Как перечислить ID через запятую?


     09.03.2019    Все вопросы » Общие вопросы по PHP    1062

вопрос
Всем привет!
Подскажите пожалуйста, как перечислить id групп через запятую, чтобы не перечислять с новой строчки elseif для каждой группы.


while ( $row = $db->get_row( $sql_result ) ) {
if ($row['user_group'] == 1 ) {$tpl->load_template( 'userinfo.tpl' ); }
elseif ($row['user_group'] == 2 ) { $tpl->load_template( 'userinfo.tpl' );}
else{ $tpl->load_template( 'userinfo2.tpl' );}

Ответил: dj-avtosh



while ( $row = $db->get_row( $sql_result ) ) {
     $tpl->load_template( 'userinfo' . ( in_array($row['user_group'], [1,2]) ? false : 2 ) . '.tpl' );
}


Еще вариант: https://dle-faq.ru/faq/phpquest/25666-kak-perechislit-id-cherez-zapyatuyu.html#comment-id-71523
+ еще варианты: https://dle-faq.ru/faq/phpquest/25666-kak-perechislit-id-cherez-zapyatuyu.html#comment-id-71538

16 комментариев

Proff
Юзер

Proff - 9 марта 2019 19:55 -

in_array()
ерундой не занимайся, in_array хватит.

vitnet
PHP-developer

vitnet - 9 марта 2019 22:47 -

while ( $row = $db->get_row( $sql_result ) ) {
	if( in_array($row['user_group'], array(1, 2)) ) {
		$tpl->load_template( 'userinfo.tpl' );
	} else{
		$tpl->load_template( 'userinfo2.tpl' );
	}

dj-avtosh
PHP-developer

dj-avtosh - 9 марта 2019 22:54 -

while ( $row = $db->get_row( $sql_result ) ) 
{

	switch ($row['user_group'])
	{

		case 1:
		case 2:
		case 3:

			$tpl->load_template( 'userinfo2.tpl' );

		break;

		default: 

			$tpl->load_template( 'userinfo.tpl' );

	}

}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 9 марта 2019 23:00 -

$userTplMap = [

	'userinfo2.tpl' => [1,2,3],

];

while ( $row = $db->get_row( $sql_result ) ) 
{

	$setUserTpl = 'userinfo.tpl';

	foreach ( $userTplMap as $k => $v )
	{

		if ( in_array( $row['user_group'], $v ) )
		{

			$setUserTpl = $k;
			break;

		}

	}

	$tpl->load_template( $setUserTpl );

}


По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 9 марта 2019 23:13 -


while ( $row = $db->get_row( $sql_result ) ) 
{

	switch (true)
	{

		case in_array($row['user_group'], [1,2,3]):

			$tpl->load_template( 'userinfo2.tpl' );

		break;

		default: 

			$tpl->load_template( 'userinfo.tpl' );

                break;

	}

}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nikitin
Юзер

Nikitin - 10 марта 2019 05:09 -

Спасибо Всем!
Немного изменил вариант vitnet. Работает, но правильно ли это?

while ( $row = $db->get_row( $sql_result ) ) {
	if( in_array($row['user_group'], array(1, 2)) ) {
		$tpl->load_template( 'userinfo.tpl' );
	} 
	elseif( in_array($row['user_group'], array(6, 8)) ) { $tpl->load_template( 'userinfo2.tpl' );
	}
	else{
		$tpl->load_template( 'userinfo.tpl' );
	}

dj-avtosh ваши варианты к сожалению не работают у меня, DLE 12.1 либо я что то не то делаю.

dj-avtosh
PHP-developer

dj-avtosh - 10 марта 2019 14:21 -

Правильно, но не очень красиво читается.
В своих примерах я поменял местами userinfo2.tpl и userinfo.tpl, в надежде что вы не будете просто копировать...

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nikitin
Юзер

Nikitin - 10 марта 2019 05:13 -

точнее.... так как групп много..

while ( $row = $db->get_row( $sql_result ) ) {
	if( in_array($row['user_group'], array(1, 2)) ) {
		$tpl->load_template( 'userinfo.tpl' );
	} 
	elseif( in_array($row['user_group'], array(6, 7)) ) { $tpl->load_template( 'userinfo2.tpl' );
	}
	elseif( in_array($row['user_group'], array(8)) ) { $tpl->load_template( 'userinfo3.tpl' );
	}
	else{
		$tpl->load_template( 'userinfo.tpl' );
	}

и т.д

DLEPlugins
Юзер

DLEPlugins - 10 марта 2019 08:29 -

Если сделать упор на быстродействие то вместо циклов и in_array лучше создать свой тпл файл под каждую группу, начиная с userinfo1.tpl, userinfo2.tpl...
А в коде прописать так
$tpl->load_template( 'userinfo'.$row['user_group'].'.tpl' );

Группа пользователя будет подставляться в название тпл файла

dj-avtosh
PHP-developer

dj-avtosh - 10 марта 2019 14:13 -

на быстродействие? Вы правда считаете, что in_array() будет работать медленнее, чем инициализация нового шаблона под каждый id группы?

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

DLEPlugins
Юзер

DLEPlugins - 10 марта 2019 23:37 -

Инициализация 1 шаблона, а не всех или каждого. Вы думаете что поиск по массиву+инициализация шаблона в случае совпадения быстрее?? :) Одна из 1000 статей про in_array

dj-avtosh
PHP-developer

dj-avtosh - 11 марта 2019 00:26 -

А Вы не путайте поиск по string и integer. Автор пытается решить отдельную задачу, а не провести бенчмарк. Таким образом можно сказать, что и like в sql-запросах не крайне умный вариант.

У автора стоит цель для группы id построить разные шаблоны (подчеркну - для группы). Дешевле копировать 10 раз одинаковый контент по tpl файлам (10 групп = 10 tpl, с вероятностью одинакового содержимого 70%)?

Не спорю, по уму вообще правильно инициализировать лишь раз нужные шаблоны, собрать результирующий контент и его присвоить к отдельным группам id.

Я думаю, однажды, автор так и поступит, когда вырастит профессионально :)

За желание разобраться - огромный респект.

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

OuteerMan
Юзер

OuteerMan - 11 марта 2019 00:31 -

У человека не будет 1к групп для того, чтобы беспокоиться об этом :D

DLEPlugins
Юзер

DLEPlugins - 11 марта 2019 00:42 -

OuteerMan,
кто знает)
dj-avtosh,
взаимно)

dj-avtosh
PHP-developer

dj-avtosh - 10 марта 2019 14:46 -

Вариант 1 (простенький switch):


while ( $row = $db->get_row( $sql_result ) ) 
{

	switch ($row['user_group'])
	{

		case 6:
		case 7:

			$tpl->load_template( 'userinfo2.tpl' );

		break;

		case 8:

			$tpl->load_template( 'userinfo3.tpl' );

		break;

		case 1:
		case 2:
		default: 

			$tpl->load_template( 'userinfo.tpl' );

	}

}


Вариант 2 (декларация):


$userTplMap = [

	'userinfo.tpl'  => [1,2],
	'userinfo2.tpl' => [6,7],
	'userinfo3.tpl' => [8],

];

while ( $row = $db->get_row( $sql_result ) ) 
{

	$setUserTpl = 'userinfo.tpl';

	foreach ( $userTplMap as $k => $v )
	{

		if ( in_array( $row['user_group'], $v ) )
		{

			$setUserTpl = $k;
			break;

		}

	}

	$tpl->load_template( $setUserTpl );

}


Вариант 3 (in_array внутри switch):


while ( $row = $db->get_row( $sql_result ) ) 
{

	switch (true)
	{

		case in_array($row['user_group'], [6,7]):

			$tpl->load_template( 'userinfo2.tpl' );

		break;

		case in_array($row['user_group'], [8]):

			$tpl->load_template( 'userinfo3.tpl' );

		break;

		case in_array($row['user_group'], [1,2]):

		default: 

			$tpl->load_template( 'userinfo.tpl' );

                break;

	}

}

По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nikitin
Юзер

Nikitin - 10 марта 2019 14:58 -

dj-avtosh,
СПАСИБО! Все работает и работало!
Выбрал 2 вариант!
Сам ошибку свою не заметил...

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх