0

だから、タイトルが言うように...に代わるもの:

$valid_times = array('ever', 'today', 'week', 'month');
if (($this->_time == 'ever') OR ($this->_time == 'day'))

また

if (in_array($this->_time, $valid_times))

??

注:私は上記の作品を知っていますが、私はただ学び、実験するための新しいことを探しています

アップデート

情報をありがとうございますが、switch()私のコードには当てはまらないため、代替案としては言及しませんでした。それはifステートメントでなければなりません、そして私は次のようなものが存在するかどうか疑問に思いました:

if($this->_time == (('ever') OR ('day') OR ('month')))

どう思いますか?上記の場合、それは最初のより短い方法になります

4

7 に答える 7

2

[編集]使用したくないと指定したため、元の回答を削除しましたswitch

更新された質問で、次のようなことが可能かどうかを尋ねました。

if($this->_time == (('ever') OR ('day') OR ('month')))

直接の答えは「いいえ、PHPではありません」です。最も近いのはin_array()、で、同じコード行に配列値が配置されています。

if(in_array($this->_time, array('ever','day','month'))

PHP 5.4のアップデートにより、配列構文を短くすることができます。つまり、単語を削除できるため、array少し読みやすくなります。

if(in_array($this->_time, ['ever','day','month'])

しかし、それはまだin_array()呼び出しです。あなたはそれを回避することはできません。

于 2012-08-24T15:56:49.240 に答える
2

これを達成するために私が考えることができる唯一の選択肢は、正規表現を使用することです。

$valid_times = array('ever','day','week','hour');

if(preg_match('/' . implode('|', $valid_times) . '/i', $this->_time)){
    // match found
} else {
    // match not found
}
于 2012-08-24T15:57:31.640 に答える
2

どうですか?

$a1 = array("one","two","three");
$found = "two";
$notFound = "four";

if (count(array_diff($a1,array($found))) != count($a1))
/* Found */

どちらでも使用できます

$found = array("one","three");

if (count(array_diff($a1,$found)) != count($a1));
/* Either one OR three */

http://codepad.org/FvXueJkE

于 2012-08-24T16:05:35.223 に答える
1

in_arrayの場合はこのようになりますか?

$arr = array(1, 2, 'test');
$myVar = 2;

function my_in_array($val, $arr){
    foreach($arr as $arrVal){
        if($arrVal == $val){
            return true;
        }
    }
    return false;
}

if(my_in_array($myVar, $arr)){
    echo 'Found!';
}
于 2012-08-24T15:56:17.377 に答える
1

複雑ですが、それは代替手段です

$input = 'day';
$validValues = array('ever','day');
$result = array_reduce($validValues,
                       function($retVal,$testValue) use($input) {
                           return $retVal || ($testValue == $input);
                       },
                       FALSE
                      );
var_dump($result);
于 2012-08-24T16:17:16.770 に答える
0

switchステートメントを使用することもできます。

switch ($this->_time) {
  case 'ever':
  case 'day':
    //code
    break;
  default:
    //something else
}
于 2012-08-24T15:56:24.967 に答える
0

科学のためyieldに、三項演算子で使用できることがわかりました。そのため、匿名のジェネレーターにいくつかの複雑な評価を入れて、すべてを評価する必要なしに、trueと評価される最初の評価を生成することができます。

$time = 'today';
if( (function()use($time){
    $time == 'ever' ? yield true:null;
    $time == 'today' ? yield true:null;
    $time == 't'.'o'.'d'.'a'.'y' ? yield true:null;
})()->current() ){
    echo 'valid';
}

この場合'valid'、連結を評価せずにエコーします。

于 2020-01-22T20:46:12.217 に答える