2

我在这里做错了什么。我希望我们最初得到的数组被转置。然后正则表达式分解其中一个列,以便我们可以查询数据库中的另一个表以用正确的标题替换该列标题。正则表达式是否正确?转置是否正确?

这将得到我们想要的查询

exportMysqlToCsv($tablename,$tokenmain, $id);
function exportMysqlToCsv($tablename,$tokenmain, $id, $filename = 'Results.csv'){
      $sql_query = "select * from $tablename where $tokenmain";

// Gets the data from the database

$result = mysql_query($sql_query);


$f = fopen('php://temp', 'wt');
$first = true;

$temp = mysql_fetch_array($result);

我希望这可以转换我们刚刚得到的数组。不确定这里

array_unshift($temp, null);
$transposed_array = call_user_func_array('array_map', $temp);

然后我们循环遍历 transposed-array 并替换我们收到的列标题(例如 111X2222X3333)并将它们拆分以查询我们想要替换它们的标题并将其输出到 excel 文件。这是我非常困惑的地方。

for ($i = 0; $i < $count; $i++) {
if ($transposed_array[$i][0])//starts with a number
{
    $sid = regexp /^[0-9]*/

    $gid = regexp /X[0-9]*X/
    //remove first and last character from $gid
    $gid = str_replace("X", "", $gid)

    $qid = regexp /[0-9]*$/

    $question_text = mysql_query("select question from lime_questions where sid =           ".$sid." and gid = ".$gid." and qid = ".$qid." limit 1");
    $transposed_array[$i][5] = $question_test
}

这应该将数组输出到 csv 文件

while ($row = mysql_fetch_assoc($result))
{
         if ($first)
     {
            fputcsv($f, array_keys($row));
            $first = false;
     }
fputcsv($f, $row);

} // end while

//恢复正常处理

$size = ftell($f);
rewind($f);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: $size");

// 以适当的 mime 类型输出到浏览器,您可以选择 ;)

header("Content-type: text/x-csv");
header("Content-type: text/csv");
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename");

fpassthru($f);

exit;
4

1 回答 1

1

不确定您想要实现什么,因为以下不是有效的 PHP 表达式

  $sid = regexp /^[0-9]*/
  $gid = regexp /X[0-9]*X/
  $qid = regexp /[0-9]*$/

但是形成你的评论

我希望这个循环拆分我们从第一个数组收到的列标题。列标题的示例是 111X222X3333。我想使用正则表达式将它们分开,所以每个都是自己的属性,例如 sid =111 gid=222 和 qid=3333

所有你需要的是

$string = "111X222X3333" ;
list($sid,$gid,$qid) = explode("X", $string);
于 2012-10-31T20:29:11.327 回答