【问题标题】:If condition inside foreach to know all matches如果 foreach 中的条件知道所有匹配项
【发布时间】:2018-03-24 14:46:18
【问题描述】:

我有这个$fields 数组:

Array
(
    [0] => Array
        (
            [field] => Name
            [condition] => 0
            [value] => abc
        )

    [1] => Array
        (
            [input] => Username
            [condition] => 1
            [value] => xyz
        )

    [2] => Array
        (
            [input] => Email
            [condition] => 1
            [value] => xyz@gmail.com
        )
    ...
)

条件 0 等于,条件 1 不等于。我怎样才能注意到所有的匹配项。

如果只有所有条件都匹配,我需要回显一些内容。我的意思是if value is abc for name and value is not xyz for username and value is not xyz@gmail.com for email field.

foreach( $fields as $field ) {
   if( $field['condition'] == 0 ) {
       if( $field['value'] == 'value_from_input') {
           echo 'something';       
       }
    }
    elseif( $field['condition'] == 0 ) {
      if( $field['value'] == 'value_from_input') {
           echo 'something';       
       }
   } 
}

但这似乎是 OR 条件,如果有任何匹配项,则会有回显。我需要所有条件来匹配。

问候,

【问题讨论】:

    标签: php if-statement foreach


    【解决方案1】:

    将标志设置为真,然后循环遍历数组,当存在不匹配的代码时,将标志设置为假并跳出循环。如果循环后flag仍然为真,则可以确定所有条件都匹配:

    $fields = [
        [
            "field" => "Name",
            "condition" => 0,
            "value" => "abc",
        ],
        [
            "field" => "Username",
            "condition" => 1,
            "value" => "abc",
        ],
        [
            "field" => "Email",
            "condition" => 1,
            "value" => "abc",
        ],
    ];
    $success = true;
    foreach( $fields as $field ) {
       if ($field["condition"] === 0) {
           $success = false;
           break;
       }
    }
    if ($success) { 
        echo "All conditions match";
    }
    else {
        echo "Some conditions don't match";
    }
    

    Demo

    实际上有很多方法可以做到这一点。另一种是过滤条件不匹配的字段,然后比较每个数组的counts:

    $filtered = array_filter($fields, function($el) {
        return $el["condition"] === 0;
    });
    $success = count($fields) === count($filtered);
    if ($success) { 
        echo "All conditions match";
    }
    else {
        echo "Some conditions don't match";
    }
    

    【讨论】:

    • 谢谢。这似乎是一个逻辑。但我需要检查if Name is abc && username isnot abc && email isnot abc@gmail.com 的情况。
    • 哦,那我不太明白。有多少元素?你的条件背后的逻辑是什么?
    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 2013-12-19
    • 2021-06-29
    相关资源
    最近更新 更多