2010-07-01 3 views
2

У меня есть вопрос PHP, который я не могу понять!Прокрутите строки базы данных и создайте один массив

Я перебрать строки из моей базы данных:

$data = array(); 

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

     $data[] = $row; 
    } 

$data теперь содержит массив в массиве, как я могу иметь это так, что ее до сих пор только один массив?

Спасибо всем

+0

массив чего? вы можете захотеть индексировать данные [] по идентификатору базы данных, правильно? – galambalazs

+0

@galambalazs - это массив строк из моей базы данных. Я просто хочу, чтобы это было как один массив, чтобы я мог обработать его позже более легко. Нет никакой реальной необходимости, но я хотел бы знать, как это сделать, если мне нужно. – Abs

ответ

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

+4

Хммм ... В чем смысл? Чтобы правильно получить все данные, вам понадобится 2D-массив. Вы просто будете менять порядок размеров, но нет способа иметь многомерный массив. – quantumSoup

+0

(1) Это ассоциативный массив, поэтому вам нужно будет вводить каждое имя столбца хотя бы один раз, чтобы даже получить доступ к данным. (2) В зависимости от того, что вам нужно делать с данными, их переупорядочение может быть пустой тратой времени. Если вы поместите строки в '$ data', вы всегда можете сделать что-то вроде этого' $ data [0] ['column_name'] для доступа к 'column_name' в первой строке и т. Д. – takteek

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(mssql_query($conn, $query) as $row) { 
    echo $row['column']; 
} 

Или присваивается переменной для подсчета и т.д.

$ соед является конечно, соединение (от 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)); 
} 
Смежные вопросы