【问题标题】:PHP comparing all value inside column of multidimensional array with variablePHP将多维数组列内的所有值与变量进行比较
【发布时间】:2018-06-03 05:31:59
【问题描述】:

我有一个多维数组和一个要比较的变量:

$var = 1;
$arr = array(
    0 => array(
        'id' => 5
        'NumberAssigned' = 1
        ),
    n => array(
        'id' => 22
        'NumberAssigned' = 1
        )
)

我想将多维数组中NumberAssigned 列中的所有值与变量进行比较,如果列中的所有值都与变量匹配,则$var = $var+1。解决办法是什么?

【问题讨论】:

  • 解决办法是什么? 你试过什么?

标签: php multidimensional-array


【解决方案1】:

一种选择是使用array_column 将多维数组变成一个简单数组。使用array_unique 获取唯一值。如果唯一值只有 1 个且与$var 相同,则所有NumberAssigned$var 相同

$var = 1;
$arr = array(
    0 => array(
        'id' => 5,
        'NumberAssigned' => 1
        ),
    1 => array(
        'id' => 22,
        'NumberAssigned' => 1
        ),
    2 => array(
        'id' => 23,
        'NumberAssigned' => 1
        ),
);


$num = array_unique(array_column($arr,'NumberAssigned'));

if( count($num) === 1 && $num[0] === $var ) $var++;

【讨论】:

    【解决方案2】:

    无需循环。
    使用 array_column 获取所有值并使用 array_unique 删除重复项。
    如果 var 在数组中并且计数为 1,则所有值都匹配 var。

    $narr = array_unique(array_column($arr, "NumberAssigned"));
    
    If(in_array($var, $narr) && count($narr) == 1){
        $var++;
    }Else{
       // They are not all 1
    }
    
    Echo $var;
    

    https://3v4l.org/k08NI

    【讨论】:

      【解决方案3】:

      您可以通过将目标列用作第一级键来强制唯一性。当您不需要微优化时,作为一种简洁的技术,您可以使用:

      if (count(array_column($arr, null, 'NumberAssigned')) < 2)
      // true if $arr is empty or all values in column are the same
      

      这在技术上并不是最快的最快算法允许在迭代列中的整个数据集之前提前返回。

      function allValuesAreSame($array, $columnName) {
          $result = [];
          foreach ($array as $row) {
              $result[$row[$columnName]] = null;
              if (count($result) > 1) {
                  return false;
              }
          }
          return true; // also true if $array is empty
      }
              
      

      【讨论】:

        猜你喜欢
        • 2015-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多