如果条件值,则拆分关联数组

时间:2017-02-07 18:02:23

标签: php arrays

我根据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;
   }
}

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

3 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

首先,要将'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;
   }
}

答案 2 :(得分:0)

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

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