【问题标题】:Using array to create WHERE condition使用数组创建 WHERE 条件
【发布时间】:2012-03-09 20:04:29
【问题描述】:

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

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);
            }

我正在尝试寻找对用户更友好的东西,因为会有其他人使用此代码。

最好的方法是什么?

【问题讨论】:

  • 如果你对传入的数组有任何控制权,请帮自己一个忙,把它变成一个关联数组。

标签: php arrays codeigniter


【解决方案1】:

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

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

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

【讨论】:

  • 是的..我知道..我正在重用一些代码..如果我更改它,我将不得不更改很多文件...但是如果我给出的这个解决方案是最好的...我会全部改变 =)
  • @Gerep 是的,绝对值得。
  • @Gerep 你不应该重用代码。这就是功能
【解决方案2】:

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

array(

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

);

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

foreach ($params as $key => $value)

【讨论】:

  • 是的......我可以做到,但正如我对@Martin 所说,我会做很多工作......但如果更改数组是最好的解决方案,我会这样做
  • @Gerep 我同意马丁的观点。完全 - 使用关联数组格式并尽快更改它。
【解决方案3】:
$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'";

应该可以的

【讨论】:

    【解决方案4】:

    从原始数组中生成一个新的合适的关联数组。然后就容易多了。

    $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 您可以构建您的查询。

    【讨论】:

    • 谢谢,但我会使用 Martin 和 Evan 的解决方案,谢谢 ;)
    • @Gerep 我以为您无法更改数组,但如果可以的话,请务必这样做。
    • 我可以改变,但工作量很大..所以我试图避免它。
    猜你喜欢
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 2020-10-03
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2015-08-27
    相关资源
    最近更新 更多