php - array_chunk 根据键值添加文本并输出到文件

标签 php arrays forms output

我是 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 个元素的数组 block 。

现在,我需要根据键值在每个新数组元素的开头和结尾添加一些常量文本。 也许我需要做一个循环或类似的东西,我已经尝试了很多次但仍然不能。 我需要帮助才能做到这一点。

例子: 如果我在网络表单中提交此文本:

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 ) ) 

这是我需要帮助的地方:

经过处理(加上常量文本后,根据key值),应该是这样的吧。但是我不知道我该怎么做。

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 行)将在末尾和开始处具有相同的额外文本。

我觉得这道题挺难的,希望有人能帮帮我。我已经在一周前尝试解决它,但我仍然做不到。

最佳答案

我希望这会有所帮助,但是这个问题需要考虑很多:

您可以在使用 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;
    }
}

然后您可以使用我在 this stackoverflow question 上从@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

关于php - array_chunk 根据键值添加文本并输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095899/

相关文章:

php - 使用多个动态复选框更新多个数据库行

php - php 事件类的奇怪行为

java - 标记二维 java 数组

php - 如何使用PHP在基于键的表中垂直显示数组值?

html - 日期选择器 html5 标签在 Mozilla、IE 浏览器上不工作。但它只适用于 Chrome

javascript - jQuery:输入的实时更新值

php - 在 php 和 mysql 中以数组格式获取数据

php - 安装 browsercap.ini

php - WordPress:API 出现错误:PUBLISHING_NOT_ALLOWED

c++ - 数组和十六进制值 C++?