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

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

Например:

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?

Надеюсь, ты меня понимаешь. Спасибо!

Ответы [ 4 ]

2 голосов
/ 08 ноября 2011

Я бы сделал:

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'



?>
1 голос
/ 08 ноября 2011

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

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';
}
1 голос
/ 08 ноября 2011

Вы можете сравнивать массивы напрямую в 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 голосов
/ 08 ноября 2011

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

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