2010-07-01 86 views
2

我有nooby PHP問題,我不明白!循環訪問數據庫行並創建單個數組

通過從我的數據庫行我循環:

$data = array(); 

    while($row = sqlsrv_fetch_array($queryResult, SQLSRV_FETCH_ASSOC)){ 

     $data[] = $row; 
    } 

$data現在包含一個陣列內的陣列我怎麼能有它,這樣它仍然只是一個單一的陣列?

感謝所有

+0

一個什麼數組?你可能想要通過數據庫ID索引數據[],對吧? – galambalazs 2010-07-01 13:30:50

+0

@galambalazs - 它是我數據庫中的一行數組。我只想把它作爲一個單一的數組,以便我可以更容易地處理它。沒有真正的需要,但我想知道如何做到這一點,以防我需要。 – Abs 2010-07-01 13:35:02

回答

2

這更明顯的方式:

$data = array(); 

while($row = sqlsrv_fetch_array($queryResult, SQLSRV_FETCH_NUMERIC){ 
    $data = array_merge($data, array_values($row)); 
} 
3

這是因爲每個$row是一個關聯數組。如果你只是希望數據是值從一列的數組,指定列:

$data = array(); 
while($row = sqlsrv_fetch_array($queryResult, SQLSRV_FETCH_ASSOC)){ 
    $data[] = $row['column_name_you_want']; 
} 
+0

太棒了,謝謝。打印所有列名的操作非常繁瑣,但我明白了你的方法。 – Abs 2010-07-01 13:36:15

+4

嗯......這是什麼意思?爲了正確獲取所有數據,無論如何您都需要2D數組。您只需切換維度的順序,但無法擁有多維數組。 – quantumSoup 2010-07-01 13:39:42

+0

(1)這是一個關聯數組,因此您需要至少在某處輸入每個列名以訪問數據。 (2)根據你需要處理的數據,重新安排它可能是浪費時間。如果你把行放到'$ data'中,你總是可以像這樣做'$ data [0] ['column_name']來訪問第一行的'column_name'等。 – takteek 2010-07-01 13:48:07

2

這應該讓你的所有值從所有列和行返回一個一維數組

$data = array(); 

while($row = sqlsrv_fetch_array($queryResult, SQLSRV_FETCH_ASSOC){ 
    $values = array_values($row); 
    foreach($values as $value) 
    { 
     $data[] = $value; 
    } 
} 
0

我看到這是一個老問題,但我也在尋找一個解決方案。想出這對我的作品如下:

function mssql_query($conn, $query, array $bind = array()) { 
    $stmt = sqlsrv_query($conn, $query, $bind); 
    if($stmt=== false) { 
     // do something with the error information 
     // die(print_r(sqlsrv_errors(), true)); 
     return array(); 
    } 
    sqlsrv_execute($stmt); 
    $data = array(); 
    while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
     array_push($data, $row); 
    } 
    return $data; 
} 

可以直接在foreach循環使用:

foreach(mssql_query($conn, $query) as $row) { 
    echo $row['column']; 
} 

或分配給一個變量計數等

$ conn是當然是連接(來自PHP.net):

$serverName = "server.example.com"; // remember to append instance if applicable 
$connectionInfo = array("Database"=>"dbname", "UID"=>"username", "PWD"=>"password"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 
if($conn === false) { 
    die(print_r(sqlsrv_errors(), true)); 
}