如何在PHP中从另一个数组构建一个数组

时间:2011-09-11 11:15:55

标签: php

我正在尝试创建基本导出。我有一个节点数组,但我无法想到如何在我的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);

}

1 个答案:

答案 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);