2011-11-08 2 views
0

У меня есть переключатель со случайным именем переменной и массивом, который может содержать значения слева, справа, вверх и вниз.Как проверить только одно значение?

Например:

switch ($i) { 
    case 0: 
     $name='something1'; 
     $array=array('north', 'south', 'west'); 
     break; 
    case 1: 
     $name='something2'; 
     $array=array('north', 'south'); 
    case 2: 
     $name='something3'; 
     $array=array('south'); 
} 

Как я могу сделать скрипт, который проверяет, например, если только значение в массиве «юг»? В моем скрипте вывод будет что-то 3, и если я проверю значение на север и юг, скрипт выведет что-то 2?

Надеюсь, вы меня поймете. Благодаря!

+0

Один из способов: не 'если (in_array ("юг", $ массива) && in_array (allothervalues, $ массива)!) {// Юг единственное значение }' – DaveL

+1

Нет, я не действительно понимаю ... как ваш вопрос связан с 'switch'? –

+0

Я бы хотел помочь, но пример имеет смысл. –

ответ

2

Я хотел бы сделать:

if((count($array) == 1) && ($array[0] == 'south')){ 
//code here 
} 

Это будет работать только, если массив имеет один элемент.

Хорошо, я думаю, что это довольно надежный способ достижения этого:

<?php 

function checktangent($array,$tocheck){ 

$tocheck = explode(',', str_replace(' ', '', $tocheck)); 

if(count($tocheck) == count($array)){ 

    $foundall = true; 

    foreach($tocheck as $value){ 
     if(!in_array($value, $array)) 
      $foundall = false; 
     } 
    return $foundall; 
    } 
else 
    return false; 

} 


//Use like: 

$array = array('north', 'south', 'west'); 


if(checktangent($array, 'north, south')) 
    echo 'found'; 
    else 
     echo 'not found' 



?> 
+0

Спасибо, но массив может иметь 0, 1, 2, 3 или 4 элемента ;-) – Jordy

+0

Хм вы сказали: \t Как я могу создать скрипт, который проверяет, например, если единственным значением в массиве является «юг», ? Изменились ли ваши требования? – Ben

+0

Обновлено с тем, что я думаю, является более полезным ответом – Ben

1

Вы можете сравнить массивы непосредственно в PHP. Будьте осторожны, потому что это также сравнивает порядок значений.

var_dump(array(1, 2) == array(1, 2)); //true 
var_dump(array(1, 2) == array(2, 1)); //false 

Если вы можете гарантировать тот же порядок, вы могли бы сделать что-то вроде этого:

<?php 
    $directions = array('north', 'south'); 
    switch($directions) { 
     case array('north'): 
     echo 'north'; 
     break; 

     case array('south'): 
     echo 'south'; 
     break; 

     case array('north', 'south'): 
     echo 'north south'; 
     break; 
    } 
?> 

http://codepad.viper-7.com/TCoiDw

+0

Хорошо, я пробую это. Благодаря! – Jordy

0

Я думаю, что простое решение будет:

array_unique($array); 
if (count($array) == 1 && in_array('south', $array)) 
    // Only south exists. 
1

Этот должен работать, если я правильно понимаю, что вы ищете

if (false == count(array_diff(array('north', 'south', 'west'), $array))) { 
    echo 'something1'; 
} else if (false == count(array_diff(array('north', 'south'), $array))) { 
    echo 'something2'; 
} else if (count($array) == 1 AND current($array) = 'south') { 
    echo 'something3'; 
} 
+0

+1 с использованием 'array_diff'. Я бы сказал, что это инструмент выбора (или 'array_intersect' и т. П.). – hakre

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