Использование массива для создания условия WHERE - PullRequest
1 голос
/ 10 марта 2012

Моя функция получает массив в качестве параметра:

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'

Мне нужно создать ГДЕ с ним, я использую CodeIgniter и пришелк этому глупому, но работающему решению:

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

Я пытаюсь найти что-то более удобное для пользователя, потому что будет другой человек, использующий этот код.

Каков наилучший способ сделать это

Ответы [ 4 ]

2 голосов
/ 10 марта 2012

Если вы можете изменить формат массива, просто используйте ассоциативный массив.Например:

array(

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

);

Тогда вы можете воспользоваться функцией key в PHP, чтобы избежать четной проверки индекса в цикле, или даже изменить цикл на:

foreach ($params as $key => $value)
2 голосов
/ 10 марта 2012

Я думаю, что это лучший способ, если вы не можете изменить этот массив. Если вы можете, сделайте это сейчас, потому что это действительно не элегантно

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

foreach($params as $x => $y) {
      $this->db->where($x, $y);
}
1 голос
/ 10 марта 2012

Создайте новый правильный ассоциативный массив из оригинала.Тогда это будет намного проще.

$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, вы можете построить свой запрос.

1 голос
/ 10 марта 2012
$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'";

Это должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...