Как использовать массив в случае? - PullRequest
0 голосов
/ 12 ноября 2011

Как я могу использовать массив в случае переключения? Это не работает и всегда принимает значение по умолчанию (3):

    switch ($my_array) {

        case array('george','paul'):
            $id     = 1;
            break;
        case array('paul','max'):
            $id     = 2;
            break;
        case array('eric'):
            $id     = 3;
            break;

        //default
        default:
            $id     = 3;
            break;

    }

Ответы [ 4 ]

4 голосов
/ 12 ноября 2011

Ваш пример должен работать, согласно руководству PHP по операторам массива :

$a == $b: ИСТИНА, если $ a и $ b имеют одинаковые пары ключ / значение.

Поскольку switch / case использует слабое сравнение, массивы сравниваются с помощью оператора ==.

Я поместил рабочий пример на кодовую панель: http://codepad.org/MhkGpPRp

0 голосов
/ 12 ноября 2011

Вы можете попробовать использовать что-то вроде этого:

switch (serialize($junctions)) {

    case serialize(array('george','paul')):
        $id     = 1;
        break;
    case serialize(array('paul','max')):
        $id     = 2;
        break;
    case serialize(array('eric')):
        $id     = 3;
        break;

    //default
    default:
        $id     = 3;
        break;

}

Но вы действительно этого хотите?

0 голосов
/ 12 ноября 2011

PHP может включать массивы, хотя для успешного сравнения необходимо иметь одинаковые ключи всех элементов.Возможно, вам потребуется использовать array_values ​​() для нормализации ключей $ my_array.В противном случае это должно работать.$my_array = array('paul','max'); должно дать $ id = 2.

0 голосов
/ 12 ноября 2011

switch() операторы предназначены для соответствия отдельным условиям.Я не думаю, что будет способ использовать переключатель для этого.Вместо этого необходимо использовать цепочку if else:

if (in_array('george', $array) && in_array('paul', $array) && !in_array('max', $array)) {
  $id = 1;
}
else if(in_array('paul', $array) && in_array('max', $array)) {
 $id = 2;
}
else if (in_array('eric', $array)) {
  $id = 3;
}
else {
  $id = 3;
}

В соответствии с правилами оператора массива , вы можете использовать ==, но члены массива должны быть в том же порядке.Технически, только ключи и значения должны совпадать, но для массива с числовым индексом это равносильно тому, что члены находятся в том же числовом порядке.

if ($array == array('john', 'paul')) {
  $id = 1;
}
else if ($array == array('paul', 'max')) {
  $id = 2;    
}
else if ($array == array('eric')) {
  $id = 3;
}
else {
  $id = 3;
}
...