2013-12-18 4 views
1

array을 반환하는 데이터베이스에서 요청을 수행하고 있습니다. 값을 살펴 보려면 foreach 루프를 사용하고 있습니다.mysqli_fetch_array() foreach loop duplicates

데이터베이스 (단 1 개 항목)

id | field1 | field2 | field3 | field4 | field5 
---|--------|--------|--------|--------|-------- 
1 | value1 |   | value3 | value4 | value5 

PHP 소스 코드

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
$q = mysqli_query($mysqli, "SELECT * FROM my_table"); 

echo "<ul>"; 
    while($q = mysqli_fetch_array($q)) 
    { 
     foreach ($q as $key => $value) 
     { 
      if($value != NULL) 
      { 
       echo "<li>".$value . "</li>"; 

       // Line below used to show column name and corresponding value 
       //echo "<li><strong>{$key}</strong>/<em>{$value}</em></li>"; 
      } 
     } 
    } 
echo "</ul>"; 

예상 HTML 출력

<ul> 
    <li>value1</li> 
    <li>value3</li> 
    <li>value4</li> 
    <li>value5</li> 
</ul> 

전류 출력

<ul> 
    <li>1</li> 
    <li>1</li> 
    <li>value1</li> 
    <li>value1</li> 
    <li>value3</li> 
    <li>value3</li> 
    <li>value4</li> 
    <li>value4</li> 
    <li>value5</li> 
    <li>value5</li> 
</ul> 

현재 문제

당신이 볼 수 있듯이, 나는 현재의 두 배에 모든 것을 가지고, 어떤 이상한 이유로, 나는 행 ID를 얻고, 또는 내가 가정 데이터베이스에 새 행을 추가 할 때 두 번째 행을 얻지 못한다고 생각하면됩니다. 나는이 while 루프가 나를 통과하는 것을 허용 할

  • 이해하는 바로는

    <ul> 
        <li>0/1</li> 
        <li>id/1</li> 
        <li>1/value1</li> 
        <li>field1/value1</li> 
        <li>3/value3</li> 
        <li>field3/value3</li> 
        <li>4/value4</li> 
        <li>field4/value4</li> 
        <li>5/value5</li> 
        <li>field5/value5</li> 
    </ul> 
    

    : 주석 줄을 사용

    대체 코드

    ,이 출력을 얻을 데이터베이스의 각 행

  • 루프는 while 루프와 유사하지만 데이터베이스 항목을 통과하는 대신 array의 키/값 쌍을 통과합니다. 나는이 쓰기로 내가 궁금해 시작 했어

    • outloud 생각

    (I이 이전의 진술에 대해 잘못 생각하는 경우 정정 해줘 주시기 바랍니다.)

    질문, whileforeach이 중복 된 것처럼 보이면 두 가지 모두 내 중복을 유발할 수있는 값을 구문 분석하는 것처럼 보입니다.

  • 행 번호 (이 경우 1)가 키가 아닐까요? 기본적으로
+0

아마 때문에 $의 Q의 존재 mysqli_query로 설정되고 잠시 동안 설정 되는가? 어쩌면'while ($ r = mysqli_fetch_array ($ q))'를 시도 할 것인가? –

+0

동일한 결과, 즉 동일한 출력을 생성합니다. – davewoodhall

답변

6

, mysqli_fetch_array() 반환 모두 연관 배열 ($key => $value)과 중복을 얻고있는 이유입니다 숫자 배열 (0 => value) - 일부 항목은 키로 열 이름을 가지고, 다른 사람은이 수치 인덱스당신이 연관 배열을 원하는 경우

, 당신은 사용할 수 있습니다

mysqli_fetch_array($q, MYSQLI_NUM); 
//or 
mysqli_fetch_row($q); 

더 많은 정보의 경우 :

mysqli_fetch_array($q, MYSQLI_ASSOC); 
//or 
mysqli_fetch_assoc($q); 

또는 숫자 배열

http://www.php.net/manual/en/mysqli-result.fetch-array.php

+3

뛰어난 캐치 – Zarathuztra