我根据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;
}
}
我如何修改它以获得我的预期输出?
答案 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'];
}
}