ここで何が間違っていますか。最初に取得した配列を転置したい。次に、正規表現によって列の 1 つが分割されるため、データベース内の別のテーブルにクエリを実行して、その列ヘッダーを正しいヘッダーに置き換えることができます。正規表現は正しいですか?トランスポーズは正しいですか?
これにより、必要なクエリが取得されます
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);
次に、転置配列をループして、受け取った列ヘッダー (例: 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;