2017-06-28 44 views
1

我想簡化應用程序如何構建查詢並循環遍歷結果。大部分實際代碼都可以工作,除了PHP不顯示從我的查詢中獲取的所有結果。創建字段數組然後循環遍歷PHP中的集合

前言:示例代碼提前,請勿在生產中使用。

首先我構建查詢。

$arr_fields = array('color', 'number', 'size'); 
$select_fields = implode(', ', $arr_fields); 
$q = "SELECT $select_fields FROM supplychain"; 

現在我執行查詢,然後遍歷結果集。
專業提示:請勿將此代碼用於任何重要內容 - 僅用於演示目的。

echo "<table>"; 
    $res = doQuery($q); 

    // create report body 
    foreach($res as $r) 
    { 

     // set values from array of field names 
     $row_fields = ''; 
     foreach ($arr_fields as $f) 
     { 
      // set current $arr_field value inside a table cell... 
      $row_fields.= "<td>$r[$f]</td>"; 
     } 

     // display the row 
     echo "<tr>$row_fields</tr>"; 

    } 
echo "</table>"; 

$arr_fieldscolor)第一數據庫值被輸出作爲預期,其餘都沒有。

在MySQL控制檯發出的組裝查詢顯示的值爲color, number and size。腳本沒有生成任何SQL錯誤。

爲什麼PHP顯示第一個字段的值但跳過了另外兩個?

+0

應該工作,什麼是'print_r($ res);'? – AbraCadaver

+0

'陣列 ( [顏色] =>紅色 [數字] => 33145551 [尺寸] =>大 )' –

回答

0

改變這一行:

$row_fields.= "<td>$r[$f]</td>"; 

到:

$row_fields.= "<td>".$r[$f]."</td>"; 
+0

這並不不幸工作(但看起來更清潔,所以具有尖端)。我在嘗試這個時發現了問題。在源數組中的字段名前面有空格。一旦我刪除這些,我現在看到結果。 –

+1

啊,錯位的空間。這是令人討厭的發現。用一個例子對此問題做出自我回答,我會對它進行投票。 –

+2

儘管這不是問題(因爲它顯然適用於[]中的變量,但不適用於常量),所以我更喜歡這種方式:'「​​{$ r [$ f]}」' PS:我其實首先想到的是這個問題,但後來認爲我會在發佈前測試它。我很驚訝它使用變量確實不會失敗,所以我今天學到了一些東西,所以......感謝弄亂了我猜@acoder的空間;) – Jay

1

問題被證明是每個在我的陣列字段名的前的空間(在本例中未示出上文)。

場陣列實際上是

$arr_fields = array('color', ' number', ' size'); 

一旦予除去空格,值出現瞭如常。感謝Norbert幫助我通過其他測試指向正確的方向。