3

私は比較的PHPに慣れていないので、助けが必要です。

ユーザーがテキストを送信できるとき、私はhtmlフォームを持っています。このテキストは php によって処理され、20 文字を超える行がある場合は改行が発生します。その後、すべてのテキストが「展開」され、配列が取得されます。これまでのところ、すべて順調です。

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'];
    $title= strtoupper($_POST['titre']);
    $txtcontent = $_POST['texte'];
    $txtcontent =  wordwrap($txtcontent,20,hexToStr('0D0A'),true);
    $txtcontent = explode("\n", $txtcontent);

print_r(array_chunk($txtcontent, 9, false));



$filecontent = implode(array_chunk($txtcontent, 9, false)); 

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 を使用して、配列 $txtcontent を 9 つの要素を持つ配列チャンクで分離しています。

ここで、キー値に従って、新しい各配列要素の先頭と末尾に一定のテキストを追加する必要があります。たぶん、ループなどを行う必要があります。何度も試しましたが、まだできません。これを行うには助けが必要です。

例: このテキストを Web フォームで送信した場合:

line1
line2
line3
line4
line5
line6
line7
line8
line9
line10
line11
line12

私は持っています:

Array ( [0] => Array ( [0] => line1 [1] => line2 [2] => line3 [3] => line4 [4] => line5 [5] => line6 [6] => line7 [7] => line8 [8] => line9 ) [1] => Array ( [0] => line10 [1] => line11 [2] => line12 ) ) 

これは私が助けを必要とするところです:

それを処理した後(キー値に従って定数テキストを追加した後)、それはそのようなものになるはずです。しかし、どうすればそれができるのかわかりません。

Array ( [0] => Array ( 
[0] => \Text 1,1,"line1"
[1] => \Text 7,1,"line2"
[2] => \Text 13,1,"line3"
[3] => \Text 19,1,"line4"
[4] => \Text 25,1,"line5"
[5] => \Text 31,1,"line6"
[6] => \Text 37,1,"line7"
[7] => \Text 43,1,"line8"
[8] => \Text 49,1,"line9"
) [1] => Array ( 
[0] => \Text 1,1,"line10"
[1] => \Text 7,1,"line11"
[2] => \Text 13,1,"line12"
) ) 

最後に、ファイルに出力すると、次のようになります。

(array_chunk を出力する方法がわかりません。これを行うには助けが必要です。)

\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"

配列の要素数は、これよりも大きい場合も小さい場合もあることに注意してください。これは単なる例です。

また、同じキーを持つ配列 (例: 1 行目と 10 行目) には、最後と最初に同じ余分なテキストがあることに注意してください。

この質問はかなり難しいと思いますが、誰かが私を助けてくれることを願っています. 私はすでに1週間前にそれを解決しようとしていますが、まだできません。

4

1 に答える 1

2

これが役立つことを願っていますが、この質問は多くのことを考慮に入れる必要があります。

array_chunk で作成した多次元配列に対して foreach ループを実行し、次のように追加するテキストを追加できます。

$chunkedarray = array_chunk($txtcontent, 9, false);
foreach($chunkedarray as $key => $array){
    foreach($array as $k => $v){
        $chunkedarray[$key][$k] = '\text '.($k*6+1).',1,'.$v;
    }
}

次に、このstackoverflowの質問で@alienwebguyから見つけた関数を使用して、多次元配列を平坦化できます:

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; 
} 
$flattenedarray = array_flatten($chunkedarray);

次に、フラット化された多次元配列を別の for ループで出力できます。

foreach($flattenedarray as $v){
  echo $v.'<br>';
}

IDEone.com でサンプル コードを確認してください: http://ideone.com/vzPJOB

于 2012-12-31T00:24:37.633 に答える