Не работает switch case в PHP

147
17 октября 2019, 19:40

Параметр $page приходит нормально, ибо код

return $page;
exit;

без проблем выводит варианты 1, 2, 3, 4 и т.д.

А вот такой код

<?php
$output = '';
//return $page;
//exit;
switch ($page) {
    case '1':
        $output = $modx->getChunk('Mobile1');
        break;
    case "2":
        $output = $modx->getChunk('Mobile2');
        break;
    case 3:
        $output = $modx->getChunk('Mobile3');
        break;
    case 0:
        $output = $modx->getChunk('Mobile4');
        break;
}
return $output;

при любом варианте $page всегда срабатывает только на последнюю строчку, case 0.

В чём проблема? (это ModX Revo, подразумевается, что $page приходит в параметре $_GET)

Просмотрел эту "1" в hex редакторе. Получилась такая хрень:

<20><31><0D><0A><20><20><20><20><20><20><20><20>

пробел, 1, перенос строки и куча пробелов.

Теперь пытаюсь прикрутить

preg_replace('/[^0-9]/', '', $str);

вообще пустую строку выдаёт (

Answer 1

Вызывать сниппет надо так:

&tplWrapper=`@CODE: [[+output]] {{!mobile?page=[[+page]]}}`

Ну и выбор тогда так:

<?php
$output = '';
switch ((int)$page) {
case 1:
    $output = $modx->getChunk('Mobile1');
    break;
case 2:
    $output = $modx->getChunk('Mobile2');
    break;
case 3:
    $output = $modx->getChunk('Mobile3');
    break;
case 0:
    $output = $modx->getChunk('Mobile4');
    break;
}
return $output;
Answer 2

я бы на вашем месте сделал как-то так

$page = intval(trim($page));
$m = [4,1,2,3];    
// $m = $page < 4 : $page : 0;
// $m = $page % 4;
$output = $modx->getChunk("Mobile{$m[$page]}"); 

для демонстрации проблемы вашего кода, и небольших раздумий о приведении типов и сравнении строк:

$page = " 1\r\n    ";
switch($page){
   case '1' : echo "ooops!";    break;
   case "1" : echo 'oooooops!'; break;
   case  1  : echo 'wow!';      break;
}
Answer 3
$page = 2;
$output = '';
switch ($page) {
    case '1':
        $output = '$modx->getChunk(Mobile1)';
        break;
    case "2":
        $output = '$modx->getChunk(Mobile2)';
        break;
    case 3:
        $output = '$modx->getChunk(Mobile3)';
        break;
    case 0:
        $output = '$modx->getChunk(Mobile4)';
        break;
}
echo $output;

у таракана уши не в ногах.

READ ALSO
расширение tpl файла в phpstorm автокомплит не работает

расширение tpl файла в phpstorm автокомплит не работает

расширение tpl файла не распознает IDE phpstorm для автокомплита, приходиться набирать функций и какие-либо конструкции в ручную

180
Таблицы из бд mysql на сайт php

Таблицы из бд mysql на сайт php

Что у меня тут не так? Сайт не запускается

170
Как отправить файл на сторонний сервер

Как отправить файл на сторонний сервер

Необходимо отправить файл на сторонний сервер но получаю ошибкуделаю так:

169
Как передать параметры UTM-метки при нажатии на кнопку?

Как передать параметры UTM-метки при нажатии на кнопку?

Возникла необходимость передавать параметры UTM-метки при нажатии на кнопкуЗнаю, что можно сделать подобное через php с помощью get, но опыта...

216