Странный эффект сравнения строк PHP, это может быть сделано лучше?

0

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

У меня был этот код:

if($Menu == "index"){
   {if ($Language == "UK"){echo "<td><h1>Welcome</h1>";}
   {if ($Language == "NL"){echo "<td><h1>Welkom </h1>";}
   }
  else
   // if $menu was not index it displayed a hyperlink to Welcome page

Строковая вещь здесь, когда проверка языка работала нормально. Сравнение для $ Menu не работало, даже если оно содержало индекс слова. Поскольку вся страница была сгенерирована "на лету" и некоторые строковые операции, которые были выполнены до того, как я предположил, что, возможно, несмотря на то, что я также тестировал ее с помощью

   echo "dump Menu variable " . $Menu

Это привело к тому, что jut отобразил индекс слова на странице. Так что, возможно, что-то не так в строковых типах или что-то в этом роде

Поэтому я экспериментировал с

  if($Menu === "index") 

Не повезло

Ну, я наконец решил это так

  if (strpos($Menu,'index' !==false)

Это действительно так, как это должно быть сделано? Я не чувствую себя очень комфортно с этим. Что касается меня, то это странно, что для $ Language это работает как надо (на мой взгляд). Существует ли какая-то проблема с типом, или, может быть, нежелательные окончания \n, я мог бы, возможно, нормализовать строку, чтобы сделать содержание читаемых сравнений строк, или другого типа равного оператора. Поскольку мне кажется, что с помощью меню "Меню" легче справляться. Может быть, переформатировать, но я не уверен здесь.

Теги:
string
compare

2 ответа

1
Лучший ответ

Похоже, что ваш индекс-String содержит пробелы, вместо strpos вы можете использовать trim( $Menu ) чтобы избавиться от них.

Но лучше всего было бы предотвратить их появление. Вы можете попробовать echo "dump Menu variable |". $Menu."|"; echo "dump Menu variable |". $Menu."|"; или просто var_dump( $Menu ) чтобы идентифицировать дополнительные символы.

Возможно, вы можете опубликовать свой сегмент кода, где заполняется $ Menu.

(извините, не могу просто прокомментировать)

  • 0
    Спасибо, действительно, в $ Menu был пробел из-за манипуляций со строками ранее в коде. использование var_dump решило это. Спасибо
0

Вы можете попробовать что-то вроде этого

$Menu = trim($Menu);
$Language = trim($Language);

$langAllowed = ["UK", "NL"]; // zero element is default;
if(!in_array($Language, $langAllowed )) $Language = $langAllowed[0];

$menuLocales=[
    "index" => [
        "UK"=>"Welcome",
        "NL"=>"Welkom "
    ],
    "default"=>[
        "UK"=>"Welcome default (no index)",
        "NL"=>"Welkom default (no index)"
    ]
];

$MenuIndex = isset($menuLocales[ $Menu ]) ? $Menu : "default";
echo "<td><h1>".$menuLocales[ $MenuIndex ][ $Language  ]."</h1>";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню