循环遍历数据库行并创建单个数组

时间:2010-07-01 13:27:52

标签: php

我有一些我无法弄清楚的PHP问题!

我遍历数据库中的行:

    $data = array();

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

        $data[] = $row;
    }

$data现在在数组中包含一个数组,我怎么能拥有它才能使它仍然只是一个数组呢?

全部谢谢

4 个答案:

答案 0 :(得分:4)

那是因为每个$row都是一个关联数组。如果您只想将数据作为一列中的值数组,请指定该列:

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

答案 1 :(得分:3)

这是一个更明显的方式:

$data = array();

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

答案 2 :(得分:2)

这应该可以将所有列和行返回的所有值作为单维数组

$data = array();

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

答案 3 :(得分: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));
}