php函数在每个空白行拆分一个数组?

时间:2009-07-27 14:49:27

标签: php arrays file multidimensional-array

我正在构建一个脚本,它将打开一个保存的文本文件,将内容导出到一个数组,然后将内容转储到数据库中。到目前为止,我已经能够非常愉快地使文件上传工作,并且还可以打开所述文件。

我遇到的麻烦是文件的内容是可变的,它们有一个固定的结构,但内容每次都会改变。该文件的结构是每个“部分”由空行分隔。

我已经使用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(),它接近我想要的但是它适用于数值,如果有某些东西可以在指定值上工作(比如新行或逗号)会有什么好处或类似的东西!)。

最后,如果以前已经回答过,请道歉。我已经在通常的地方搜索了几次潜在的解决方案。

希望你能帮忙:) 感迷惑

5 个答案:

答案 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