2016-05-06 3 views
0

У меня проблема с коммутатором. Прямо сейчас от моего понимания это работает так:Выключатель и выбор нескольких вариантов

if (sizeof($a) !== sizeof($types)) { 
    $type = $a[ 0 ]; 
    switch ($type) { 
     case 'Red' : 
      $type = 'winered'; 
      break; 
     case 'blue' : 
      $type = 'royalblue'; 
      break; 
     case 'yellow' : 
      case 'lime' : 
      break; 
     case 'beige' : 
      $type = 'bright'; 
      break; 
     default : 
      $type = get_option('my_option'); 
      break; 
    } 
} else { 
    $type = get_option('my_option'); 
} 

До сих пор так хорошо. Что бы я ни выбрал, это показывает случай. Мой вопрос, он делает это только один за другим, я могу выбрать несколько случаев, как

case Red: case Blue:   
$type = 'winered'; 
break; 

Но это не будет работать для меня. В моем сценарии это флажок, я получил случай «Красный» и «Синий», и вы хотите отобразить оба «результата»: «winered» AND «royalblue». Прямо сейчас он возвращается к королевскому цвету.

Любые предложения? Спасибо!

+0

вы пропустите понять о 'переключатель case'! Он может работать только один за другим. –

+0

Как вы хотите, чтобы вывести результаты BOTH? Оба печатаются на экране отдельно или вместе в 1 строке? –

+1

Вопрос на самом деле не очень хорошо сформулирован. Возможно, вы сможете достичь того, чего хотите, провалившись, не можете быть уверены, пока не уточните, что хотите. – Mikey

ответ

0

Это действительно не имеет смысла, почему он будет падать обратно 'royalblue', кроме:

  1. 'Red' != 'red', так что никогда на самом деле идет в первый case
  2. Может быть, это как вы типы хранятся в $a, так что $a[0] на самом деле 'blue', я бы это проверить.

В любом случае, если бы вы интересовались сочетанием разных условий, я бы подумал, что «регулярный», если-то-другой - это путь. Дело, как правило, быстрее, но предлагает себя для «более простых» условностей.

Надеюсь, это поможет!

+0

Спасибо за ваш комментарий! Я думал о том, если-то-иначе, но это было слишком сложно для меня, переключатель, казалось, был проще, но на самом деле он показывал только один выбор. У меня есть список, и я хочу сортировать его на основе флажков. Если я выберем красный цвет, он отобразит все винные, если я выберу синий, он отобразит все королевские символы. Но я хочу выбрать красный и синий, и он должен показать мне winered AND royalblue. – Gordon

1

Я не думаю, что это возможно с помощью корпуса коммутатора, чтобы выбрать несколько результатов. Я бы предпочел использовать оператор if:

if($type = 'red' || $type = 'blue'){ 
    $type = 'winered'; 
    $type = $type.'royalblue'; 
} 
+2

'+' - это арифметическое дополнение (и оно работает только для чисел). Используйте правильный [оператор конкатенации строк] (http://php.net/manual/en/language.types.string.php # language.types.string.useful-funcs) ('.'). – axiac

+1

Простите, глупая ошибка! отредактированный –

0

Ваш код не заполнен. Тем не менее, я думаю, что ключ находится здесь:

$type = $a[ 0 ]; 
switch ($type) { 

Вы только проверить первое значение $a. Вы можете проверить все свои значения с помощью простого foreach:

// Put the selected values here; will join them at the end to get a string 
$selected = array(); 

if (count($a) != count($types)) { 
    foreach ($a as $type) { 
     switch ($type) { 
     case 'Red': 
      $selected[] = 'winered'; 
      break; 
     case 'blue': 
      $selected[] = 'royalblue'; 
      break; 
     case 'yellow': 
     case 'lime': 
      // nothing here?! 
      break; 
     case 'beige': 
      $selected[] = 'bright'; 
      break; 
     default: 
      $selected[] = get_option('my_option'); 
      break; 
     } 
    } 
} else { 
    $selected[] = get_option('my_option'); 
} 

// Join the selected type with spaces 
$type = implode(' ', $selected); 
+0

Ваш пример показывает, что оба действия, которые являются замечательными до сих пор, вместо того, чтобы каждая запись приводила их собственное действие, теперь записи отображаются обоими действиями независимо от их базы. Таким образом, запись 'red' становится действием' winered' AND 'royalblue' вместо' winered'. Запись 'blue' получает действие' winered' и 'royalblue' вместо 'royalblue'. Решение, которое я пытаюсь выяснить, - дать «красное» действие «winered» и «blue» action 'royalblue'. Код моего OT показывает только один за раз, так как он делает перерыв. Прошу прощения за все объяснения. – Gordon

Смежные вопросы