【问题标题】:Multiple Condition inside php arrayphp数组中的多个条件
【发布时间】:2019-03-01 06:25:03
【问题描述】:

如何在多个条件下检查 php 数组中的最小值。我的数组如下:

$arr = [[472 =>['EL' => 52.9,'MT' => 57.375 'MO' => 56.6,'SC' => 26,'ET' => 50.775]], 
       [505 =>['EL' => 53.425,'MT' => 25,'MO' => 62.8,'SC' => 23,'ET' => 25]]];    
$total = array_reduce(
   $arr,
   function($arr, $key) {
     $id = key($key);
     $consumed = $key[$id];
     $sc = array_keys($consumed);
     $arr[$id] = [
       "totalc" => array_sum($consumed),
       "condition" =>  array_search('SC', $sc) ? min($consumed) >= 23:min($consumed) >=26
     ];
     return $arr;
   },
   []
 );

如果键是'SC','SC'的最小值是23,但是对于其他键的值,最小值是26。所以上面的代码必须产生以下输出:

 Array
(
    [472] => Array
        (
            [totalc] => 243.65
            [condition] => 1
        )    
    [505] => Array
        (
            [totalc] => 189.225
            [condition] => 
        )
    )

数组( [472] 和 [505] )中的 SC 键都满足最小条件 23,但键 ET 的值不满足最小条件 26。所以数组 [505] 应该在 condition 键的值上生成 false。但是如果我们在 [505] 数组上将ET 的值更改为 26 或更多,我们仍然会得到false 的值。但正确的值必须是1true。所以如果数组如下:

$arr = [[472 =>['EL' => 52.9,'MT' => 57.375 'MO' => 56.6,'SC' => 26,'ET' => 50.775]], 
           [505 =>['EL' => 53.425,'MT' => 25,'MO' => 62.8,'SC' => 23,'ET' => 26]]];

正确的输出是:

Array
    (
        [472] => Array
            (
                [totalc] => 243.65
                [condition] => 1
            )    
        [505] => Array
            (
                [totalc] => 189.225
                [condition] => 1
            )
        )

简而言之,'SC'的最小值应该是23,其他KEYS(EL,MT,MO,ET)的mim值应该是26。我尝试解决这个问题几乎两天两夜,它仍然不起作用。因此,如果您能帮助我,我将不胜感激。谢谢

【问题讨论】:

  • 我显示了预期的输出。仔细看,样本数组在key ET值上是不一样的。
  • 在 505 数组中 MT 的值 'MT' => 25 所以条件应该是假的吧?或者只是 ET 和 SC 的值必须检查
  • 是的。正确的。问题是:当它是 26 或更多时,它是不正确的。

标签: php arrays filter conditional-statements


【解决方案1】:
$arr = [[472 => ['EL' => 52.9, 'MT' => 57.375, 'MO' => 56.6, 'SC' => 26, 'ET' => 50.775]],
        [505 => ['EL' => 53.425, 'MT' => 25, 'MO' => 62.8, 'SC' => 23, 'ET' => 26]]];
function pr($arr)
{
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
}

$total = array_reduce($arr, function ($arr, $key) {
    $id   = key($key);
    $temp = $consumed = $key[$id];
    $sc   = array_keys($consumed);
    $condition = false;
    if (array_search('SC', $sc) && ($consumed['SC']) >= 23) {
        $condition = true;
    }
    unset($temp['SC']);

    $condition = ($condition && min($temp) >= 26 ? true : false);
    $arr[$id] = [
        "totalc"    => array_sum($consumed),
        "condition" => $condition,
    ];
    return $arr;
});

pr($total);die;

如果 min SC 为 23 并且所有其他的 min 为 26,则条件为真。

解释:

472 => SC = 26(>=23) 并且所有其他值 >= 26 所以condition = true
505 => SC = 23(>=23) 现在我将检查其他值。现在 MT = 25 所以condition = false

让我们来看一些示例演示示例,

$arr = [[472 => ['EL' => 52.9, 'MT' => 57.375, 'MO' => 56.6, 'SC' => 22, 'ET' => 50.775]],
        [505 => ['EL' => 53.425, 'MT' => 26, 'MO' => 62.8, 'SC' => 23, 'ET' => 26]]];

472 => SC condition = false 与其他值无关。
505 => SC >= 23 所以首先是condition = true,现在我们将检查所有其他值。正如我们看到的,所有其他的都大于 26,所以condition =true

工作demo

【讨论】:

  • 还是不行。这两个条件都必须为真,因为第二个数组中的 ET 是 26。
  • 由于您覆盖了条件,您的代码无法正常工作。
  • 如果 min SC 为 23 且 ET 的 min 为 26,则条件为真。是吗?你是想说 SC >= 23 和 ET >= 26 然后是真的,其余所有值都没有关系?
  • 不只是ET,对于其他KEY的值如EL、MT、MO,最小值为26。仅SC最小值为23。所以如果SC不满足23,则条件必须为假不管其他值。如果 other 的任何一个值低于 26,则无论 SC 值是否变为 true,条件都必须为 false。
  • 无论您解释什么标准,我的 sn-p 都可以正常工作。请仔细检查。
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多