【问题标题】:Splitting a Associative Array Based off if Condition of Value根据 if 值条件拆分关联数组
【发布时间】:2017-02-07 18:02:23
【问题描述】:

我正在组合一个基于 MySQL 查询的数组:

$newskus = array();
$newqtys = array();

$sql1 = $db->query("//QUERY//");

while($row = $sql1->fetch_assoc()) {
    $newskus[] = $row['SKU'];
    $newqtys[] = $row['Quantity'];
}

$newskusandqtys = array_combine($newskus, $newqtys);

这给了我一个像这样的关联数组:

Array
(
[Product 1] => -1
[Product 2] => 0
[Product 3] => 3
)

我希望根据整数值的条件拆分此数组。

即如果值大于0,则将内容放入变量$newqtysabovezero

以预期的输出结束

Array
(
[Product 3] => 3
)

反之,如果值大于或等于 0,则将其放入数组变量 $newqtysbelowzero 中,预期输出为

Array
(
[Product 1] => -1
[Product 2] => 0
)

我可以用数字数组来做到这一点,但它当然没有传递密钥:

foreach( $newqtys as $item ) {
   if ( $item > '0' ) {
       $newqtysabovezero[] = $item;
   } elseif ( $item <= '0') {
       $newqtysbelowzero[] = $item;
   }
}

如何修改它以获得我的预期输出?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    这是一种方法:

    foreach( $newqtys as $key => $item ) {
        if ( $item > '0' ) {
            $newqtysabovezero[$key] = $item;
        } elseif ( $item <= '0') {
            $newqtysbelowzero[$key] = $item;
        }
    }
    

    这是一个使用array_filter()的方法:

    $in = array(
        'Product 1' => -1,
        'Product 2' => 0,
        'Product 3' => 3
    );
    
    function at_and_below($v) {
        return $v <= 0;
    }
    
    function above($v) {
        return $v > 0;
    }
    
    $newqtysabovezero = array_filter($in, 'above');
    
    $newqtysbelowzero = array_filter($in, 'at_and_below');
    

    【讨论】:

      【解决方案2】:

      首先,要将'Quantity' 字段中的所有值作为整数,您应该将它们转换为整数类型:

      ...
      while($row = $sql1->fetch_assoc()) {
          $newskus[] = $row['SKU'];
          $newqtys[] = (int) $row['Quantity'];
      }
      
      $newskusandqtys = array_combine($newskus, $newqtys);
      

      然后,您可以轻松区分 大于等于/小于 0:

      foreach (newskusandqtys as $k => $item) {
         if ($item > 0) {
             $newqtysabovezero[$k] = $item;
         } else {
             $newqtysbelowzero[$k] = $item;
         }
      }
      

      【讨论】:

        【解决方案3】:

        您可以跳过array_combine 部分,并在获取它们时将值读入最终数组。

        while($row = $sql1->fetch_assoc()) {
            if ($row['Quantity'] > 0) {
               $newqtysabovezero[$row['SKU']] = $row['Quantity'];
            } else {
               $newqtysbelowzero[$row['SKU']] = $row['Quantity'];
            }
        }
        

        【讨论】:

        • 完美答案。很好很简单。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 2015-01-02
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 2017-07-03
        • 2012-01-26
        相关资源
        最近更新 更多