2016-04-05 2 views
0

мне нужно, чтобы получить некоторые валюты идентификаторов из дб, это мой кодPDO повторяющихся значений в массиве

$arr = []; 

$currency_codes = array("USD", "RUB"); 
$currency_codes_in = implode(',', array_fill(0, count($currency_codes), '?')); 
$query = "SELECT `curr_id` FROM `dictionary_currency` WHERE `curr_code` IN (". $currency_codes_in .")"; 
$stmt = $db->prepare($query); 
foreach ($currency_codes as $k => $id) { 
    $stmt->bindValue(($k+1), $id); 
} 

$stmt->execute(); 
$currencies = $stmt->fetchAll(); 

foreach($currencies as $currency) 
{ 
    foreach($currency as $key => $value) 
    { 
     $arr[] = $value; 
    } 
} 
print_r($arr); 
exit(); 

это $currencies массива

Array 
(
    [0] => Array 
     (
      [curr_id] => 643 
      [0] => 643 
      [curr_code] => RUB 
      [1] => RUB 
     ) 

    [1] => Array 
     (
      [curr_id] => 840 
      [0] => 840 
      [curr_code] => USD 
      [1] => USD 
     ) 

) 

и это $arr

Array 
(
    [0] => 643 
    [1] => 643 
    [2] => 840 
    [3] => 840 
) 

Я не понимаю, почему я получаю повторяющиеся значения в массивах и как их предотвратить?

+0

Какой ключ вы хотите от массива '$ currencies'? – Apb

ответ

1

Петля является проблематичным:

foreach($currencies as $currency) { 
    foreach($currency as $key => $value) { 
      $arr[] = $value; 
    } 
} 

Просто используйте простой

foreach($currencies as $currency) { 
    $arr[] = $currency[0]; 
} 

Изменить # 1:

Использование $currencies и старый запрос, я получил следующее :

Array 
(
    [0] => Array 
    (
     [curr_id] => 643 
     [0] => 643 
     [curr_code] => RUB 
     [1] => RUB 
    ) 

    [1] => Array 
    (
     [curr_id] => 840 
     [0] => 840 
     [curr_code] => USD 
     [1] => USD 
    ) 
) 

Array 
(
    [0] => 643 
    [1] => 643 
    [2] => RUB 
    [3] => RUB 
    [4] => 840 
    [5] => 840 
    [6] => USD 
    [7] => USD 
) 
+0

Спасибо, это работает! но я до сих пор не понимаю, почему я получаю повторяющиеся значения в массивах ( – Heidel

+1

вы уверены, что с вашим дампом? используя ваш старый запрос, '$ arr' должен иметь значения USD и RUB, а также .. checkout my dump, используя ваш' $ валютные данные .. @Heidel –

-1

использование следующий запрос $ запроса = "SELECT DISTINCT curr_id ОТ dictionary_currency ГДЕ curr_code В (". $ currency_codes_in. ")";

+0

Нет, я попробовал, это не сработало. – Heidel

2

PDO - это обертка базы данных, которая может многое сделать для вас. Например, входные значения

Так ведь вам нужно в два раза меньше кода, чем у вас есть сейчас:

$currency_codes = array("USD", "RUB"); 
$currency_codes_in = implode(',', array_fill(0, count($currency_codes), '?')); 
$query = "SELECT `curr_id` FROM `dictionary_currency` WHERE `curr_code` IN ($currency_codes_in)"; 
$stmt = $db->prepare($query); 
$stmt->execute($currency_codes); 
$arr = $stmt->fetchAll(PDO::FETCH_COLUMN); 

или I скорее предложит сделать это как

$query = "SELECT curr_code, curr_id FROM dictionary_currency WHERE `curr_code` IN ($currency_codes_in)"; 
$stmt = $db->prepare($query); 
$stmt->execute($currency_codes); 
$arr = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); 
+0

Спасибо большое за помощь! – Heidel

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