使用&&;/数组的AND运算符


Using the && / AND operator for an array

此代码检查数据库中的$value(数组)是否设置为1。foreach循环将所有的基础匹配保存到数组$products中。现在,数据库中的所有字段都有值1,但这并不是我真正想要的,因为如果字段"dog"等于1,字段"cat"等于NULL,那么我的数组中仍然有值"dog"。只有当BOTH等于1时,它才应该到达数组。

对于简单变量,您可以使用&&AND运算符来检查是否所有键都具有相同的值,但如何对数组执行此操作?

$products = array();
foreach($_POST['selected_checkboxes'] as $value) {
    var_dump($value);
    if($result = $db->query("SELECT * FROM produkte WHERE `$value` = 1")){
        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');
    }
}

更改SQL语句,使所有检查的值都等于1。

您可以为每个值附加一个" = 1 AND ",然后在查询中使用它们。

<?php
$arr = ['field1', 'field2', 'field3'];
$condition = join(' = 1 AND ', $arr) . ' = 1';

输出为"field1 = 1 AND field2 = 1 AND field3 = 1"。然后,您可以在查询中使用$condition

$db->query("SELECT * FROM produkte WHERE $condition")

更新:

要处理包含空格的字段名,您需要用反勾号包裹每个字段名,因此更改这行

$condition = '`' . join('` = 1 AND `', $arr) . '` = 1';