php-闭包中的闭包-有更好的方法吗?
我使用一个键值对数组(值可能是数组)为SQL查询构造WHERE语句 键值对被转换为'key`='value',并放在它们之间,但如果值是数组,则依次内爆为或条件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
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')