2017-05-06 15 views
2

PDO :: FETCH_UNIQUEフラグを使用して、次のPDOステートメントを使用して、結果配列を一意の行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_ループを使用していて、各_key_を_value_に加えて使用する方法をお探しですか? –

+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

これは間違いなく正しい方向への一歩ですが、 "uid"の代わりに "unique_id"という名前のキーを保持する方法がありますか?私は 'as $ key => $ values'構文を使うことができることを理解していますが、この配列を" unique_id key "を探すレガシーコードに供給しています。 – bbeckford

+0

試しましたか?なぜあなたのようなものがあると思いますか? –

1

配列インデックスをそのまま使用し、行データ[...]に一意の行IDを保持する方法はありますか?

私が知る限り、存在しません。 array_expressionで指定した配列に関し上

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

最初のフォームループ:ただし、foreachは、2つの構文をサポートします。各反復で、現在の要素の値が$ valueに割り当てられ、内部配列ポインタが1つ進められます(次の反復では、次の要素が表示されます)。

第2の形式では、現在の要素のキーを各繰り返しで$key変数に割り当てます。 1

だから、2番目の構文を使用します。

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

関連する問題