繁体   English   中英

使用数组创建WHERE条件

[英]Using array to create WHERE condition

我的函数接收一个数组作为参数:

array(6) {
  [0]=>
  string(7) "usuario"
  [1]=>
  string(4) "john"
  [2]=>
  string(5) "senha"
  [3]=>
  string(40) "7c4a8d09ca3762af61e59520943dc26494f8941b"
  [4]=>
  string(9) "pessoa_id"
  [5]=>
  string(1) "2"
}

我需要的:

SELECT * FROM (`funcionarios`) WHERE `usuario` = 'john' AND `senha` = '7c4a8d09ca3762af61e59520943dc26494f8941b' AND `pessoa_id` = '2'

我需要使用它创建一个WHERE,我使用的是CodeIgniter,我想到了这个愚蠢但可行的解决方案:

foreach($params as $x) {
                if($pos%2==0)
                    $chave = $x;
                else
                    $valor = $x;
                $pos++;
                if($pos%2==0)
                    $this->db->where($chave, $valor);
            }

我正在尝试找到更用户友好的内容,因为会有其他人使用此代码。

做这个的最好方式是什么?

我认为这是最好的方法,如果您不能更改该数组。 如果可以的话,现在就这样做,因为它确实很不雅

$data = array(
   "usuario" => "john",
   "senha" => "7c4a8d09ca3762af61e59520943dc26494f8941b",
   "pessoa_id" => 2
);

foreach($params as $x => $y) {
      $this->db->where($x, $y);
}

如果可以更改数组的格式,则只需使用关联数组。 例如:

array(

    "usuario" => "john" //etc.

);

然后,您可以利用PHP中的key函数来避免在循环中进行偶数索引检查,甚至可以将循环更改为:

foreach ($params as $key => $value)
$query = "SELECT * FROM `funcionarios` WHERE ";
$wheres = array();

foreach ($paramas as $key => $val) {
    $wheres[] = "`$key`='$val'";
}

$query .= implode(' AND ', $wheres); // $query is now "SELECT * FROM `funcionarios` WHERE `myKey`='myValue' AND `otherkey`='otherval'";

那应该工作

从原始对象生成一个新的适当的关联数组。 然后要容易得多。

$arr = array("key1", "value1", "key2", "value2", "key3", "value3");
$newArr = array();
for ($i = 0; $i < count($arr); $i += 2) {
    $newArr[$arr[$i]] = $arr[$i + 1];
}

然后使用foreach可以构建查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM