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

时间:2015-03-13 23:50:04

标签: php sql recursion closures

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

键值对变为'key` =' value'使用AND放在它们之间,但如果值是一个数组,那么它又会被破坏成OR条件。

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')

有更好的方法吗?有了递归,也许?

1 个答案:

答案 0 :(得分:0)

也许使用IN()

WHERE `side` = 'left' AND type IN('type','dropdown')