2016-04-05 6 views
0

に重複する値をPDO、これは私のコードです私はデシベルからいくつかの通貨IDを取得する必要があり、配列

$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

あなたは '$ currency'配列からどのキーを使いたいですか? – 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の値を持つべきです..' $通貨のデータ.. @Heidel –

-1

使用は "SELECT DISTINCT curr_iddictionary_currency FROM WHERE curr_code IN("。 $ 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:例えば、

だから実際には、あなたが今持っているよりも2倍少ないコードを必要とする)(実行しますむしろそれを好むように提案するだろう

$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

関連する問題