2

すべての array_chunk の最初にカウンターを追加し、最後にテキストを追加するのに問題があります。

以下は私の実際のコードです。$txtcontent を Web フォームからのテキスト入力として使用します。

        function hexToStr($hex)
{
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2)
    {
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}



    $format = $_POST['format'];
    $titre= strtoupper($_POST['titre']);
    $txtcontent = $_POST['texte'];
    $txtcontent =  wordwrap($txtcontent,20,hexToStr('0D0A'),true);


$txtcontent = explode("\n", $txtcontent);
$input = array_chunk($txtcontent, 9, false);
foreach($input as $key => $array){
    foreach($array as $k => $v){
        $input[$key][$k] = '\text '.($k*6+1).',1,'.$commas.str_replace(hexToStr('0D'), "", $v).$commas.hexToStr('0D0A');
    }
}
function array_flatten($array) { 
  if (!is_array($array)) { 
    return FALSE; 
  } 
  $result = array(); 
  foreach ($array as $key => $value) { 
    if (is_array($value)) { 
      $result = array_merge($result, array_flatten($value)); 
    } 
    else { 
      $result[$key] = $value; 
    } 
  } 
  return $result; 
} 
$array = array_flatten($input);

$filecontent = implode($array);     

    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment;filename='.$_POST['titre'].'.'.$format.'');
    header('Cache-Control: max-age=0');

    //$fh = fopen($filename, 'wb');
    $fh = fopen('php://output', 'wb');
    fwrite($fh, $filecontent);
    fclose($fh);

すべての array_chunk の最初にカウンターを追加し、最後にテキストを追加します。

例: このコンテンツを Web フォームの入力として送信する場合:

line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12
line13
line14
line15
line16
line17
line18
line19
line20

次の内容のファイルがあります。

\text 1,1,"line1"
\text 7,1,"line2"
\text 13,1,"line3"
\text 19,1,"line4"
\text 25,1,"line5"
\text 31,1,"line6"
\text 37,1,"line7"
\text 43,1,"line8"
\text 49,1,"line9"
\text 1,1,"line10"
\text 7,1,"line11"
\text 13,1,"line12"
\text 19,1,"line13"
\text 25,1,"line14"
\text 31,1,"line15"
\text 37,1,"line16"
\text 43,1,"line17"
\text 49,1,"line18"
\text 1,1,"line19"
\text 7,1,"line20"

ただし、以下のコードのようなものが必要です。各チャンクの先頭に \If S=1 などのカウンタを追加し、最後に \IfEnd というテキストを追加する必要があります

\If S=1
\text 1,1,"line1"
\text 7,1,"line2"
\text 13,1,"line3"
\text 19,1,"line4"
\text 25,1,"line5"
\text 31,1,"line6"
\text 37,1,"line7"
\text 43,1,"line8"
\text 49,1,"line9"
\IfEnd
\If S=2
\text 1,1,"line10"
\text 7,1,"line11"
\text 13,1,"line12"
\text 19,1,"line13"
\text 25,1,"line14"
\text 31,1,"line15"
\text 37,1,"line16"
\text 43,1,"line17"
\text 49,1,"line18"
\IfEnd
\If S=3
\text 1,1,"line19"
\text 7,1,"line20"

入力は常に 20 行を超える場合があることに注意してください。

誰でもそれを行う方法について何か提案はありますか?

4

1 に答える 1

1

foreach ループの代わりに次のコードを配置しようとしましたが、説明したのと同じ出力になりました (引用符を除く)。

$i = 1;
foreach($input as $key => $array){
    $j = 1;
    $input[$key][0] = "\If S=".$i."\n";
    foreach($array as $k => $v){
        $input[$key][$k+1] = '\text '.($k*6+1).',1,'.$commas.str_replace(hexToStr('0D'), "", $v).$commas.hexToStr('0D0A');
        $j++;
    }
    if ($j == 10) $input[$key][10] = "\IfEnd\n";
    $i++;
}

これが役立つことを願っています。基本的に、配列に追加のキーと値のペアを追加して、反復ごとに If と IfEnd を取得し、いくつかのカウントを保持しました。

于 2012-12-31T15:53:14.210 に答える