我的函数接收一个数组作为参数:
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);
}
我正在尝试找到更友好的用户,因为会有其他人使用此代码。
这样做的最佳方式是什么?
答案 0 :(得分:2)
我认为如果你不能改变那个数组,这是最好的方法。如果可以,现在就这样做,因为它真的很不优雅
$data = array(
"usuario" => "john",
"senha" => "7c4a8d09ca3762af61e59520943dc26494f8941b",
"pessoa_id" => 2
);
foreach($params as $x => $y) {
$this->db->where($x, $y);
}
答案 1 :(得分:2)
如果您可以更改数组的格式,只需使用关联数组即可。例如:
array(
"usuario" => "john" //etc.
);
然后你可以利用PHP中的key
函数来避免在循环中进行偶数索引检查,甚至可以将循环更改为:
foreach ($params as $key => $value)
答案 2 :(得分:1)
$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'";
那应该有用
答案 3 :(得分:1)
从原始数组生成新的正确关联数组。然后它就容易多了。
$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,您可以构建查询。