2013-07-02 48 views
0

我試圖通過傳遞一個數組與數據庫中的字段從數據庫中拉出數據。在多維數組中使用變量

browse_fields = array ('id', 'name', 'weight'); 

這裏是funcation:

function browse($id, $fields) { 
    $data = array(); 
    $fields2 = $fields; 
    $fields = '`' . implode('`, `', $fields) . '`'; 
    $query = mysql_query("..."); 
    if (mysql_num_rows($query) > 0) { 
     while ($row = mysql_fetch_assoc($query)) { 
      foreach($fields2 as $key) { 
       $data[] = array("$key" => $row["$key"]); 
      } 
     } 
    } 
    return $data; 
} 

我需要一個數組的輸出數組。但是我得到一個數組中的數組。我懷疑我的問題在這裏:$data[] = array("$key" => $row["$key"]);,但我顯然密集,使其正常工作。

+1

只需設置$ data [$ key] = $ row [$ key]; –

+0

db querry返回feild名稱,這是$ key,因此循環是冗餘的 – 2013-07-02 04:03:10

+0

也不需要if(mysql_num_rows ...如果沒有結果,while將跳過 –

回答

1

你的代碼看起來應該是:

function browse($id, $fields) { 
    $data = array(); 
    $fields2 = $fields; 
    $fields = '`' . implode('`, `', $fields) . '`'; 
    $query = mysql_query("..."); 
    if (mysql_num_rows($query) > 0) { 
     $rec = array(); 
     while ($row = mysql_fetch_assoc($query)) { 
      foreach($fields2 as $key) { 
       $rec[$key] = $row["$key"]; 
      } 
      $data[] = $rec; 
     } 
    } 
    return $data; 
} 

這會給你想要的結果。您需要爲每個記錄創建一個鍵控數組,而不是每個字段。

+0

你基本上接受了我的評論,並把它作爲答案 –

+0

@SethMcClaine評論是不存在當我開始答案......這個解決方案是錯的反正我正在修改... – Orangepill

+0

@ SethMcClaine兩個我們原來的解決方案的問題是,它會一直覆蓋$ data數組中的每個記錄的相同元素,因此操作會以一個僅包含集合中最後一條記錄的字段的1維數組結束 – Orangepill

-1

不知道這是你的問題,但你應該嘗試

$newitem = array("$key" => $row["$key"]); 
array_push($data, $newitem); 

是內部的foreach內。

0

不能看到實際的輸出幫助它。但我認爲用

foreach($fields2 as $key) { 
      $data[$key] = $row["$key"]; 
     } 

可以幫助你。