Как задать перечисление в php?

455
06 ноября 2017, 23:18

Пытаюсь создать мультилендинг на php, есть шесть так называемых шаблонов (египет,бали,араб-эмираты,греция,вьетнам,по умолчанию) подскажите пожалуйста, как задать перечисление этих самых utm меток? чтобы каждый раз не прописывать одно и тоже.

Т.е там где например "египет" добавить "Отдых в египте"

<?php 
$utm = $_GET['utm_content']; 
 
if($utm == 'египет') { 
	$multiTitle = '<h2 class="h2">Отдых в <span>Египте</span> на 7 ночей <br> от  <span>340$ </span>с человека</h2>'; 
	$multiHeaderBg = 'img/header-slider/egypt.jpg'; 
	$multiInputHidden = 'Заявка на тур в Египет'; 
} 
elseif($utm == 'бали') { 
	$multiTitle = 'Отдых на <span>Бали</span> на 7 ночей <br> от  <span>413$</span> с человека'; 
	$multiHeaderBg = 'img/header-slider/bali.jpg'; 
	$multiInputHidden = 'Заявка на тур в Бали'; 
} 
elseif($utm == 'арабские-эмираты') { 
	$multiTitle = 'Отдых в <span>Арабских Эмиратах</span> на 7 ночей от  <span>413$</span> с человека'; 
	$multiHeaderBg = 'img/header-slider/arabic-emiratec.jpg'; 
	$multiInputHidden = 'Заявка на тур в Арабские Эмираты'; 
} 
elseif($utm == 'греция') { 
	$multiTitle = 'Отдых в <span>Греции</span> на 7 ночей <br>от <span>511&euro;</span> с человека'; 
	$multiHeaderBg = 'img/header-slider/grecia.jpg'; 
	$multiInputHidden = 'Заявка на тур в Грецию'; 
} 
elseif($utm == 'вьетнам') { 
	$multiTitle = 'Отдых во <span>Вьетнаме</span> на 7 ночей <br> от  <span>413$</span> с человека'; 
	$multiHeaderBg = 'img/header-slider/vietnam.jpg'; 
	$multiInputHidden = 'Заявка на тур во Вьетнам'; 
} 
else{ 
	$multiTitle = '<span>Ранее</span> бронирование <br> туров в любые страны!'; 
	$multiHeaderBg = 'img/header-slider/6.jpg'; 
	$multiInputHidden = 'Заявка на ранее бронирование'; 
} 
?>

Answer 1
Switch

Ручное наполнение условий, не особо, но читаемый код:

switch(mb_strtolower($utm)) {
    case 'египет':
    case 'отдых в египте':
        $multiTitle = '<h2 class="h2">Отдых в <span>Египте</span> на 7 ночей <br> от  <span>340$ </span>с человека</h2>';
        $multiHeaderBg = 'img/header-slider/egypt.jpg';
        $multiInputHidden = 'Заявка на тур в Египет';
        break;
    case 'бали':
        $multiTitle = 'Отдых на <span>Бали</span> на 7 ночей <br> от  <span>413$</span> с человека';
        $multiHeaderBg = 'img/header-slider/bali.jpg';
        $multiInputHidden = 'Заявка на тур в Бали';
        break;
    default:
        $multiTitle = '<span>Ранее</span> бронирование <br> туров в любые страны!';
        $multiHeaderBg = 'img/header-slider/6.jpg';
        $multiInputHidden = 'Заявка на ранее бронирование';
        break;
}
preg_match

Это как ваш текущий if, только расширенный

if(preg_match('/(египет|отдых в египте)/iu', $utm) {
    $multiTitle = '<h2 class="h2">Отдых в <span>Египте</span> на 7 ночей <br> от  <span>340$ </span>с человека</h2>';
    $multiHeaderBg = 'img/header-slider/egypt.jpg';
    $multiInputHidden = 'Заявка на тур в Египет';
}
elseif(preg_match('/(бали|отдых на бали)/iu', $utm)) {
    $multiTitle = 'Отдых на <span>Бали</span> на 7 ночей <br> от  <span>413$</span> с человека';
    $multiHeaderBg = 'img/header-slider/bali.jpg';
    $multiInputHidden = 'Заявка на тур в Бали';
}
else{
    $multiTitle = '<span>Ранее</span> бронирование <br> туров в любые страны!';
    $multiHeaderBg = 'img/header-slider/6.jpg';
    $multiInputHidden = 'Заявка на ранее бронирование';
}
foreach in_array

Массивный способ, но он позволяет хранить и работать с данными динамически. К примеру можно выгрузить информацию в .json файл или в БД.

$multi_landing = [
    [
        'utm' => [
            'египет',
            'отдых в египте'
        ],
        'title' => '<h2 class="h2">Отдых в <span>Египте</span> на 7 ночей <br> от  <span>340$ </span>с человека</h2>',
        'header-bg' => 'img/header-slider/egypt.jpg',
        'input-hidden' => 'Заявка на тур в Египет'
    ], [
        'utm' => [
            'бали',
            'отдых на бали'
        ],
        'title' => 'Отдых на <span>Бали</span> на 7 ночей <br> от  <span>413$</span> с человека',
        'header-bg' => 'img/header-slider/bali.jpg',
        'input-hidden' => 'Заявка на тур в Бали'
    ]
];
$mark = mb_strtolower($utm);
$multiTitle = '<span>Ранее</span> бронирование <br> туров в любые страны!';
$multiHeaderBg = 'img/header-slider/6.jpg';
$multiInputHidden = 'Заявка на ранее бронирование';
foreach($multi_landing as $option) {
    if(in_array($mark, $option['utm'])) {
        $multiTitle = $option['title'];
        $multiHeaderBg = $option['header-bg'];
        $multiInputHidden = $option['input-hidden'];
        break;
    }
}
Answer 2

Храните данные в массиве:

$utms = [
    'египет' => [
        'title' => '<h2 class="h2">Отдых в <span>Египте</span> на 7 ночей <br> от  <span>340$ </span>с человека</h2>',
        'header-bg' => 'img/header-slider/egypt.jpg',
        'input-hidden' => 'Заявка на ранее бронирование',
    ],
    'бали' => [
        // наполнение для "бали"
    ],
    // и так далее
];

Для общего случая можно придумать какой-нибудь особый ключ массива. Например, default.

Тогда код обработки данных станет более общим:

$utm = $_GET['utm_content'];
if (!array_key_exists($utm, $utms)) {
    $utm = 'default';
}
$multiTitle = $utms[$utm]['title'];
$multiHeaderBg = $utms[$utm]['header-bg'];
$multiInputHidden = $utms[$utm['input-hidden'];
READ ALSO
Как в Yii2 передать два параметра action view и как нужно прописать urlManager rules для двух параметров?

Как в Yii2 передать два параметра action view и как нужно прописать urlManager rules для двух параметров?

Передать нужно два параметра id и url_alias в action view и настроить rules

254
Как показать авторизацию админки в yii2

Как показать авторизацию админки в yii2

в main layout есть такой код

313
Обработка пустых ключей массива в php

Обработка пустых ключей массива в php

Вопрос достаточно спорныйДопустим есть строка, которая может меняться

254
Выбор select из бд

Выбор select из бд

Здравствуйте!

294