我正在构建一个脚本,它将打开一个保存的文本文件,将内容导出到一个数组,然后将内容转储到数据库中。到目前为止,我已经能够非常愉快地使文件上传工作,并且还可以打开所述文件。
我遇到的麻烦是文件的内容是可变的,它们有一个固定的结构,但内容每次都会改变。该文件的结构是每个“部分”由空行分隔。
我已经使用php的文件()来获取一个数组......我不确定是否有办法在每次遇到一个空行时拆分该数组?
$file = $target_path;
$data = file($file) or die('Could not read file!');
示例输出:
[0] => domain.com
[1] => # Files to be checked
[2] => /www/06.php
[3] => /www/08.php
[4] =>
[5] => domain2.com
[6] => # Files to be checked
[7] => /cgi-bin/cache.txt
[8] => /cgi-bin/log.txt
[9] =>
[10] => domain3.com
[11] => # Files to be checked
[12] => /www/Content.js
[13] =>
我知道字段0和1将是常量,它们将始终是域名,然后是该哈希行。此后的线可以是1行到1000行之间的任何地方。
我看过array_chunk(),它接近我想要的但是它适用于数值,如果有某些东西可以在指定值上工作(比如新行或逗号)会有什么好处或类似的东西!)。
最后,如果以前已经回答过,请道歉。我已经在通常的地方搜索了几次潜在的解决方案。
希望你能帮忙:) 感迷惑
答案 0 :(得分:3)
我认为你要找的是preg_split。如果你只是在回车上拆分,你可能会错过只有空格或标签的行。
$output = array(...);//what you just posted
$string_output = implode('', $output);
$array_with_only_populated_lines = preg_split('`\n\W+`', $string_output);
答案 1 :(得分:1)
你试过分裂('\ n \ n',$ file); ?
答案 2 :(得分:1)
你可以做这样的事情。您也可以将其更改为逐行读取文件而不是使用file(),这会占用更少的内存,如果您使用更大的文件,这可能很重要。
$handle = fopen('blah', 'r');
$blocks = array();
$currentBlock = array();
while (!feof($handle)) {
$line = fgets($handle);
if (trim($line) == '') {
if ($currentBlock) {
$blocks[] = $currentBlock;
$currentBlock = array();
}
} else {
$currentBlock[] = $line;
}
}
fclose($handle);
//if is anything left
if ($currentBlock) {
$blocks[] = $currentBlock;
}
print_r($blocks);
答案 3 :(得分:1)
我会使用函数preg_grep()
来减少生成的数组:
$array = preg_grep('/[^\s]/', $array);
答案 4 :(得分:0)
你可以先在空行上分割,然后在新行上分割,例如:
$file = $target_path;
$fileData = file_get_contents($file) or die('Could not read file!');
$parts = explode("\n\n", $data);
$data = array();
foreach ($parts as $part) {
$data[] = explode("\n", $part);
}
您还可以使用preg_split()代替第一个explode(),并在仅包含空格的行(例如\ s +)上使用正则表达式sp.lit