2

ここで何が間違っていますか。最初に取得した配列を転置したい。次に、正規表現によって列の 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;
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 に答える