2017-05-06 20 views
2

我使用與PDO以下PDO聲明:: FETCH_UNIQUE標誌,以使結果陣列由唯一行ID索引。是否可以使用PHP PDO :: FETCH_UNIQUE在結果數組中保持唯一索引?

<?php 
    $statement = $conn->prepare(" 
     SELECT 
      unique_id, field_1, field_2, field_3 
     FROM 
      table 
     WHERE 
       field_1 = 'foo' 
      AND field_2 = ? 
     ORDER BY 
      field_3 
    "); 

    if($statement->execute(array($field_2_value))) 
    { 
     $resultArray = $statement->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE); 
    } 
?> 

$ resultArray:

Array 
(
    [123] => Array 
     (
      [field_1] => foo 
      [field_2] => someVal 
      [field_3] => bar 
     ) 
    [234] => Array 
     (
      [field_1] => foo 
      [field_2] => someVal 
      [field_3] => car 
     ) 
    [345] => Array 
     (
      [field_1] => foo 
      [field_2] => someVal 
      [field_3] => dog 
     ) 
) 

有沒有辦法讓這兩個數組索引,因爲它們是在這樣的行數據保留唯一行ID:

Array 
(
    [123] => Array 
     (
      [unique_id] => 123 
      [field_1] => foo 
      [field_2] => someVal 
      [field_3] => bar 
     ) 
    [234] => Array 
     (
      [unique_id] => 234 
      [field_1] => foo 
      [field_2] => someVal 
      [field_3] => car 
     ) 
    [345] => Array 
     (
      [unique_id] => 345 
      [field_1] => foo 
      [field_2] => someVal 
      [field_3] => dog 
     ) 
) 

我知道我可以用一個二次迴路做到這一點,但它會覺得有很多清潔,如果這是在fetchAll()的選項。

+0

您是否使用了_foreach_循環,並尋找一種方式來利用除了每個_value_每個_key_? –

+0

@SamOnela是的,我目前正在重寫一個遺留函數,在該遺留函數中,通過這個代碼庫以多種不同方式使用結果數組,並保持兼容性,我需要保留鍵和值。 – bbeckford

回答

1

是的,這完全有可能,因爲你可以一個額外的字段總是添加到字段列表。

$statement = $conn->prepare(" 
    SELECT 
     unique_id uid, unique_id, field_1, field_2, field_3 
    FROM 
     table 
    WHERE 
      field_1 = 'foo' 
     AND field_2 = ? 
    ORDER BY 
     field_3 
"); 

,並有值之間的UNIQUE_ID。

不過,我不認爲這是相當必要的,因爲你總是可以得到的foreach的指數,因爲它在其他答覆中提到。

+0

這無疑是向正確方向邁出的一步,謝謝,但有沒有辦法做到這一點,保持名爲「unique_id」而不是「uid」的關鍵?我意識到我可以使用'as $ key => $ values'語法,但是我將這個數組提供給一些遺留代碼,它將查找「unique_id key」,我不想破壞它。 – bbeckford

+0

你試過了嗎?你爲什麼認爲會有像UID一樣的東西? –

1

有沒有一種方法可以保持數組索引的原樣,並在行數據中保留唯一的行ID [...]?

據我所知,沒有。然而,foreach支持兩種語法:

foreach (array_expression as $value) 
    statement 
foreach (array_expression as $key => $value) 
    statement 

給定的array_expression陣列上的第一種形式的循環。在每次迭代中,當前元素的值被賦值爲$ value,並且內部數組指針被前進一個(所以在下一次迭代時,您將查看下一個元素)。

第二種形式將另外分配當前元素的以在每次迭代的$key可變密鑰。 1

因此,使用第二個語法:

foreach($resultArray as $key => $values) { 
    //$key is contains the unique_id 

    //$values contains the other fields 
    //e.g. field_1, field_2, field_3 
} 

看到它在this playground example證明。


http://php.net/manual/en/control-structures.foreach.php

+0

是的,我意識到我可以使用'as $ key => $ values'語法,但是我將這個數組提供給一些遺留代碼,它將查找unique_id鍵,我不想破壞它。 – bbeckford

相關問題