php-闭包中的闭包-有更好的方法吗?

php-闭包中的闭包-有更好的方法吗?,php,sql,recursion,closures,Php,Sql,Recursion,Closures,我使用一个键值对数组(值可能是数组)为SQL查询构造WHERE语句 键值对被转换为'key`='value',并放在它们之间,但如果值是数组,则依次内爆为或条件 private function constructWhereStatement() { if (!isset($this->where) || !is_array($this->where)) { return 'WHERE 1'; } array_walk($this->where, fu

我使用一个键值对数组(值可能是数组)为SQL查询构造WHERE语句

键值对被转换为'key`='value',并放在它们之间,但如果值是数组,则依次内爆为或条件

private function constructWhereStatement() {

  if (!isset($this->where) || !is_array($this->where)) {
     return 'WHERE 1';
  }

  array_walk($this->where, function(&$value, $key) {

     if (is_array($value)) {

        array_walk($value, function (&$v, $k, $key){
           $v = "`$key` = '$v'";
        }, $key);

        $value = "(" . implode(' OR ', $value) . ")";
     } else {
        $value = "`$key` = '$value'";
     }
  });
  return "WHERE " . implode(' AND ', $this->where);
}
因此,
['side'=>'left','type'=>['page','dropdown']]
将返回:

WHERE `side` = 'left' AND (`type` = 'page OR `type` = 'dropdown')
有更好的方法吗?使用递归,可能?

可能用于()


是否有更好的方法将键/值对转换为WHERE语句。。。有不同的方法,但我不会说它们更好。不过,您可以看看更大的PHP框架/ORM解决方案是如何处理这样的事情的。例如,IMO有一个不错的解决方案。您可以使用查询生成器构造查询,例如
->whereId(1)->或where('sum','>',300)
我想了解更多关于是否有更好的方法来实现这样的双闭包。似乎有一种非常聪明的递归方法可以做到这一点。
WHERE `side` = 'left' AND type IN('type','dropdown')