2012-03-09 4 views
1

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

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

Если у вас есть контроль над массивом, который проходит, сделайте себе одолжение и превратите его в ассоциативный массив. – Crontab

ответ

2

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

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

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

yeah..I знаю .. Я повторно использую код. Если я его изменю, мне придется изменить много файлов ... но если это решение я дал, это лучше всего ... Я изменю all =) – Gerep

+0

@Gerep да, абсолютно того стоит. –

+0

@Gerep вы не должны повторно использовать код. Вот что такое функции для –

2

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

array(

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

); 

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

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

Да, я могу это сделать, но, как я сказал @ Мартину, я много работаю над этим ... но если изменить массив - лучшее решение, я сделаю это – Gerep

+1

@Gerep Я согласен с Мартином. полностью - используйте формат ассоциативного массива и измените его как можно скорее. –

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'"; 

Это должно work

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

+0

Спасибо, но я буду использовать решение Martin и Evan, спасибо в любом случае;) – Gerep

+1

@Gerep Я предположил, что вы не можете изменить массив, но если вы можете это сделать. –

+0

Я могу изменить, но это будет очень много работы. Я пытался избежать этого. – Gerep

Смежные вопросы