我正在尝试创建基本导出。我有一个节点数组,但我无法想到如何在我的CVS脚本中使用它。我是PHP的新手。这是我遇到麻烦的地方的地方。
这是我的节点代码。
foreach ($nodes as $node) {
print $node->nid;
print $node->title;
}
//这是我的cvs代码。
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
$mydata = array(
array('data11', 'data12', 'data13'),
array('data21', 'data22', 'data23'),
array('data31', 'data32', 'data23'));
outputCSV($csv);
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);
}
答案 0 :(得分:0)
快速而简单的解决方案是强制将$ vals变量强制转换为数组,因此您的函数将如下所示:
function outputCSV($data) {
$outstream = fopen("php://output", 'w');
function __outputCSV(&$vals, $key, $filehandler) {
if (is_object($vals)) {
$vals = (array)$vals;
}
fputcsv($filehandler, $vals); // add parameters if you want
}
array_walk($data, '__outputCSV', $outstream);
fclose($outstream);
}
这是可能的,因为我引用here,“如果一个对象被转换为一个数组,那么结果就是一个数组,其元素是对象的属性。”
另一个解决方案是遍历您的$ nodes数组并根据CSV生成函数接受的结构创建一个新数组:
$dataFromNodes = array();
foreach ($nodes as $node) {
$dataFromNodes[] = array($node->nid, $node->title);
}
然后,使用新创建的数组调用您的函数:
outputCSV($dataFromNodes);