php - 获取此 PHP 错误 : fputcsv() expects parameter 2 to be array

标签 php arrays csv fputcsv array-splice

我正在尝试使用 array_splice 将一个数组插入到一个数组数组中。

array_splice($array, 0, 0, $fieldNames);

然后使用 fputcsv 将生成的数组转换为 csv 格式。我收到以下错误:

 fputcsv() expects parameter 2 to be array  string given in...

我做错了什么?一定是一些小错误。请任何帮助。我也采取了正确的方法。我对函数的 PHP 知识并不丰富。

完整的 php 代码:

<?php

//MySQL login details
require('sqlAuth.php');

//return error data
function errorReport($error)
{
    $data = array("error" => $error);
    $json = json_encode($data);
    echo $json;
    die();
}

//export array to csv file
function outputCSV($data) {
    $outstream = fopen("php://output", "w");
    function __outputCSV(&$vals, $key, $filehandler) {
        fputcsv($filehandler, $vals); // add parameters if you want
    }
    array_walk($data, "__outputCSV", $outstream);
    fclose($outstream);
}

// open connection 
$connection = mysql_connect($host, $user, $pass) or errorReport("Unable to Connect"); 

// select database 
mysql_select_db($db, $connection) or errorReport("Unable to Select Database: " .mysql_error()); 

//build result set array
$array = array();

//get full questions table
$query = "SELECT q.q_id, q.trip_day, q.q0_1, q.q0_2, q.q0_3, q.q0_4, q.q0_5, q.q0_6, g.address, g.latitude, g.longitude, g.method, q.q1_1, q.q1_2, q.q1_3, q.q1_7, q.q1_9, q.q1_10, q.q1_11_1, q.q1_11_2, q.q1_11_3, q.q1_11_4, q.q2_6, q.q6_0,
                 q.q6_1, q.q6_1_1_1, q.q6_1_1_2, q.q6_1_1_3, q.q6_1_1_4, q.q6_1_1_5, q.q6_1_1_6, q.q6_1_1_7, q.q6_1_1_8, q.q6_1_1_9, q.q6_1_1_10, q.q6_1_1_11, q.q6_1_1_12, q.q6_1_1_13, q.q6_1_1_14, 
                 q.q6_1_1_15, q.q6_1_1_16, q.q6_1_2_1, q.q6_1_2_2, q.q6_1_2_3, q.q6_1_2_4, q.q6_1_2_5, q.q6_1_2_6, q.q6_1_2_7, q.q6_1_2_8, q.q6_1_2_9, q.q6_1_2_10, q.q6_1_2_11, q.q6_1_2_12, q.q6_1_2_13, 
                 q.q6_1_2_14, q.q6_1_2_15, q.q6_1_2_16, q.q6_1_3_1, q.q6_1_3_2, q.q6_2, q.q6_2_1_1, q.q6_2_1_2, q.q6_2_1_3, q.q6_2_1_4, q.q6_2_1_5, q.q6_2_1_6, q.q6_2_1_7, q.q6_2_1_8, q.q6_2_1_9, 
                 q.q6_2_1_10, q.q6_2_1_11, q.q6_2_1_12, q.q6_2_1_13, q.q6_2_1_14, q.q6_2_1_15, q.q6_2_1_16, q.q6_2_2_1, q.q6_2_2_2, q.q6_2_2_3, q.q6_2_2_4, q.q6_2_2_5, q.q6_2_2_6, q.q6_2_2_7, 
                 q.q6_2_2_8, q.q6_2_2_9, q.q6_2_2_10, q.q6_2_2_11, q.q6_2_2_12, q.q6_2_2_13, q.q6_2_2_14, q.q6_2_2_15, q.q6_2_2_16, q.q6_2_3_1, q.q6_2_3_2, q.q6_3, q.q6_3_1_1, q.q6_3_1_2, 
                 q.q6_3_1_3, q.q6_3_1_4, q.q6_3_1_5, q.q6_3_1_6, q.q6_3_1_7, q.q6_3_1_8, q.q6_3_1_9, q.q6_3_1_10, q.q6_3_1_11, q.q6_3_1_12, q.q6_3_1_13, q.q6_3_1_14, q.q6_3_2_1, q.q6_3_2_2, q.q6_3_2_3, 
                 q.q6_3_2_4, q.q6_3_2_5, q.q6_3_2_6, q.q6_3_2_7, q.q6_3_2_8, q.q6_3_2_9, q.q6_3_2_10, q.q6_3_2_11, q.q6_3_2_12, q.q6_3_2_13, q.q6_3_2_14, q.q6_3_3_1, q.q6_3_3_2 
                 FROM questions AS q LEFT JOIN gmap_address_list AS g ON q.q0_7 = g.id";
$result_questions = mysql_query($query) or errorReport("Error in query: $query. ".mysql_error());
while ($row = mysql_fetch_array($result_questions, MYSQL_ASSOC)) {
    $array[] = $row;
}

//get field names
$fieldNames = array();
$fieldNum = mysql_num_fields($result_questions);
for ($i = 0; $i < $fieldNum; $i++) {
    $fieldNames[] = mysql_field_name($result_questions, $i);
}
array_splice($array, 0, 0, $fieldNames);

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=emmhts_questionnaires.csv");
header("Pragma: no-cache");
header("Expires: 0");
outputCSV($array);

// free result set memory
mysql_free_result($result_questions);

//close connection to mysql db
mysql_close($connection);
?>

编辑:

这是数组的一部分,在 outputCSV($array) 之前添加 print_r($array) 之后,应该是 csv 文件的第一行。看起来0号位置插入的数组在“[124] => q6_3_3_2”之后并没有关闭,而是有一个子数组。

Array
(
    [0] => q_id
    [1] => trip_day
    [2] => q0_1
    [3] => q0_2
    [4] => q0_3
    [5] => q0_4
    [6] => q0_5
    [7] => q0_6
    [8] => address
    [9] => latitude
    [10] => longitude
    [11] => method
    [12] => q1_1
    [13] => q1_2
    [14] => q1_3
    [15] => q1_7
    [16] => q1_9
    [17] => q1_10
    [18] => q1_11_1
    [19] => q1_11_2
    [20] => q1_11_3
    [21] => q1_11_4
    [22] => q2_6
    [23] => q6_0
    [24] => q6_1
    [25] => q6_1_1_1
    [26] => q6_1_1_2
    [27] => q6_1_1_3
    [28] => q6_1_1_4
    [29] => q6_1_1_5
    [30] => q6_1_1_6
    [31] => q6_1_1_7
    [32] => q6_1_1_8
    [33] => q6_1_1_9
    [34] => q6_1_1_10
    [35] => q6_1_1_11
    [36] => q6_1_1_12
    [37] => q6_1_1_13
    [38] => q6_1_1_14
    [39] => q6_1_1_15
    [40] => q6_1_1_16
    [41] => q6_1_2_1
    [42] => q6_1_2_2
    [43] => q6_1_2_3
    [44] => q6_1_2_4
    [45] => q6_1_2_5
    [46] => q6_1_2_6
    [47] => q6_1_2_7
    [48] => q6_1_2_8
    [49] => q6_1_2_9
    [50] => q6_1_2_10
    [51] => q6_1_2_11
    [52] => q6_1_2_12
    [53] => q6_1_2_13
    [54] => q6_1_2_14
    [55] => q6_1_2_15
    [56] => q6_1_2_16
    [57] => q6_1_3_1
    [58] => q6_1_3_2
    [59] => q6_2
    [60] => q6_2_1_1
    [61] => q6_2_1_2
    [62] => q6_2_1_3
    [63] => q6_2_1_4
    [64] => q6_2_1_5
    [65] => q6_2_1_6
    [66] => q6_2_1_7
    [67] => q6_2_1_8
    [68] => q6_2_1_9
    [69] => q6_2_1_10
    [70] => q6_2_1_11
    [71] => q6_2_1_12
    [72] => q6_2_1_13
    [73] => q6_2_1_14
    [74] => q6_2_1_15
    [75] => q6_2_1_16
    [76] => q6_2_2_1
    [77] => q6_2_2_2
    [78] => q6_2_2_3
    [79] => q6_2_2_4
    [80] => q6_2_2_5
    [81] => q6_2_2_6
    [82] => q6_2_2_7
    [83] => q6_2_2_8
    [84] => q6_2_2_9
    [85] => q6_2_2_10
    [86] => q6_2_2_11
    [87] => q6_2_2_12
    [88] => q6_2_2_13
    [89] => q6_2_2_14
    [90] => q6_2_2_15
    [91] => q6_2_2_16
    [92] => q6_2_3_1
    [93] => q6_2_3_2
    [94] => q6_3
    [95] => q6_3_1_1
    [96] => q6_3_1_2
    [97] => q6_3_1_3
    [98] => q6_3_1_4
    [99] => q6_3_1_5
    [100] => q6_3_1_6
    [101] => q6_3_1_7
    [102] => q6_3_1_8
    [103] => q6_3_1_9
    [104] => q6_3_1_10
    [105] => q6_3_1_11
    [106] => q6_3_1_12
    [107] => q6_3_1_13
    [108] => q6_3_1_14
    [109] => q6_3_2_1
    [110] => q6_3_2_2
    [111] => q6_3_2_3
    [112] => q6_3_2_4
    [113] => q6_3_2_5
    [114] => q6_3_2_6
    [115] => q6_3_2_7
    [116] => q6_3_2_8
    [117] => q6_3_2_9
    [118] => q6_3_2_10
    [119] => q6_3_2_11
    [120] => q6_3_2_12
    [121] => q6_3_2_13
    [122] => q6_3_2_14
    [123] => q6_3_3_1
    [124] => q6_3_3_2
    [125] => Array
        (
            [q_id] => 29
            [trip_day] => Thursday
            [q0_1] => 4
            [q0_2] => 5
            [q0_3] => 5
            [q0_4] => 5
            [q0_5] => 5
            [q0_6] => 0732152589

最佳答案

感谢您发布数组数据。问题是您的数组是多维的。 IE。你在 125 处有一个“子数组”。

查看文档 (http://php.net/manual/en/function.fputcsv.php) 并不清楚,但您不能将多维数组与 fputcsv 一起使用。如果你考虑一下,你传递的数组将在 csv 中转换为一行。

您需要考虑您的数据结构,以及您希望它在您的 csv 中如何格式化,并相应地修改您的代码。

关于php - 获取此 PHP 错误 : fputcsv() expects parameter 2 to be array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407603/

相关文章:

Java-如何比较一维数组和二维数组

java - 构造函数 ClassRoll(String f) 赋值帮助,我需要确定为什么无法显示滚动

javascript - 当 3 列具有相同标题时,在 node.js 中使用 fast-csv 读取 csv

python - 在 CSV 文件中查找特定的分割字符串 [Python]

r - 如何在R中读取多个csv文件并使用fread函数跳过最后一行

php - 根据插入请求自动从 SQL 表中删除旧记录

php - Query_builder Symfony 表单生成器错误

php - 验证内容是否已在 Facebook 上共享

php - codeigniter 通知系统的数据库表结构

c# - 在 Unity 中使用 GetKeyDown 一次显示一个数组中的元素