在进行MySQL查询之前删除一些数组元素

时间:2015-11-10 14:40:30

标签: php mysql sql arrays

$arr的值未设置为NULL时,以下代码会向我提供所有产品。

$arr有时还包含需要过滤掉的值。

这意味着,$condition我希望检查是否"所有"数组$arr中的值未设置为NULL但忽略值" apple"," orange"和"香蕉"当你在阵列中找到它们时。

有没有办法实现我的目标?我也尝试从数组中删除这些元素(第2行),但由于某种原因,这对我不起作用。

$arr = $_POST['selected_checkboxes'];
unset($arr["apple"], $arr["orange"], $arr["banana"]); // Trying to remove these keys from the array
var_dump($arr);
$products = array();
$condition = '`' . join('` IS NOT NULL AND `', $arr) . '` IS NOT NULL';
if($result = $db->query("SELECT * FROM produkte WHERE $condition")){
    while($row = $result->fetch_object()) {
        if (!in_array($row->name, $products)) {
            array_push( $products, array('name'=>$row->name, 'image'=>$row->image, 'link'=>$row->link) );
        }
    }
}
else {
    array_push($products, 'error');
}

1 个答案:

答案 0 :(得分:0)

根据提供的代码,我猜你在键和值之间存在混淆; $arr['apples']仅在您拥有复选框<input ... name="apples">时才会存在,但根据您的SQL,您似乎拥有<input ... name="selected_checkboxes" value="apples">;在这种情况下,您可能想尝试类似:

<?php
    $filter = ['banana', 'orange', 'apple'];
    $p = ['papaya', 'mango', 'pear', 'apple', 'grape', 'orange', 'cranberry'];
    $arr = array_filter($p, function($v) use($filter) { return !in_array($v, $filter); });
    var_dump($arr);