VIDTAKER.COM

Q&A

PHPの関数は、それぞれの空白行で配列を分割するには?


こんにちは、

私は保存したテキストファイルを開くするスクリプトを、配列の内容をエクスポートする建物だとし、データベースの内容をダンプします。非常に喜んで作業アップロードこれまでのところ私は、ファイルを取得することができたにも開くことができますファイルと述べた。

問題は私が持っているファイルの内容は変数、彼らはしかし、固定された構造を持って内容は毎回変更されます。ファイルの構造は、各"セクション"が空白行で区切られている。

私は配列を取得するために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 Replies

1)

あなたはこのような何かができる。また、ではなく、ラインでライン内のファイルを読み取るために()ファイルを使用して、その場合は大きなファイルを使用する場合に重要かもしれないより少ないメモリを使用すると、それを変更することができます。

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

2)

)がありますドルを試した分割のn \ n'を、(\'ファイル;?


3)

あなたが最初の空白行に分割し、新しい行に、例えばでそれを行うこと:

$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にの代わりに)


4)

私が考えるものを探している場合は、 preg_split 。あなたは、キャリッジリターンに分割する場合、あなただけのスペースまたはタブを持って行を逃すかもしれません。

$output =  array(...);//what you just posted
$string_output = implode('', $output);
$array_with_only_populated_lines = preg_split('`\n\W+`', $string_output);

5)

私は関数を使用するpreg_grep()結果の配列を減らすために:

$array = preg_grep('/[^\s]/', $array);