2017-05-06 4 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_와 _key_ _를 각각 활용하는 방법을 찾고 있습니까? –

+0

@SamOnela 예, 저는 현재 결과 배열이이 코드베이스에서 여러 가지 다른 방식으로 사용되는 호환성 기능을 유지하기 위해 키와 값을 모두 유지해야하는 레거시 함수를 다시 작성하고 있습니다. – bbeckford

답변

1

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

시도해 보셨습니까? 왜 uid와 같은 것이있을 거라고 생각하니? –

1

배열 색인을 그대로 유지하고 행 데이터 [...]에 고유 행 ID를 유지하는 방법이 있습니까?

내가 아는 한, 없다. array_expression에서 주어진 배열 위에

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

제 형태 루프 그러나, foreach 두 구문을 지원한다. 각 반복에서 현재 요소의 값이 $ value에 할당되고 내부 배열 포인터가 1만큼 앞당겨집니다 (다음 반복에서 다음 요소를 보게됩니다).

두 번째 양식은 각 반복마다 $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