Her boş satırda bir dizi bölmek için php fonksiyonu?

4 Cevap php

Ben, bir kaydedilmiş metin dosyasını açmak için bir dizi içeriği vermek ve sonra bir veritabanı içeriğini dökümü bir komut dosyası inşa ediyorum. Şimdiye kadar oldukça mutlu çalışan dosya yükleme almak mümkün oldum ve ayrıca söz konusu dosyayı açabilirsiniz.

Ben yaşıyorum sorun dosyanın içerikleri, belli bir yapısı var ama içeriği her zaman değişecek, değişken olmasıdır. Dosyanın yapısı, her "bölüm" boş bir çizgi ile ayrılmış olmasıdır.

Ben bir dizisini almak için) (PHP dosyasını kullandım ... Ben o zaman boş bir hat üzerinden geliyor her zaman bu diziyi bölmek için bir yol varsa emin değilim?

  $file = $target_path;
  $data = file($file) or die('Could not read file!');

Örnek çıktı:

[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] =>

Ben Tarla 0 ve 1 sabitler olacağını, her zaman sonra bir etki alanı adı olduğunu karma hat olacağını biliyorum. Çizgiler sonra 1 hattı ve 1000 hatları arasında herhangi bir yerde olabilir.

Ben ne istiyorum yakın olan) (array_chunk baktım ama yeni bir çizgi gibi bir belirtilen değer üzerinde çalışacak bir şey (veya bir virgül ya da bir şey olsaydı ne iyi olurdu, bir sayısal değer üzerinde çalışıyor bu tür!).

Bu daha önce cevap olmuştur eğer Son olarak özür dilemek. Ben olası çözümler için zamanki yerlerde birkaç kez aradık.

Hope you can help :) Foxed

4 Cevap

Sadece böyle bir şey yapabilirdi. Sen büyük dosyaları kullanırsanız önemli olabilir ki, daha az bellek kullanmak hangi,) (yerine dosyayı kullanarak daha line-by-line dosyasını okumak için de bunu değiştirebilir.

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

Ben ne arıyorsanız preg_split olduğunu düşünüyorum. Sadece bir satır üzerinde bölerseniz, sadece boşluk veya sekme var hatları kaçırabilir.

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

Siz örneğin, boş hat üzerinde ve daha sonra yeni hatlar üzerinde ilk bölerek yapabiliriz:

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

Ayrıca, sadece boşluk (örneğin, \ s +) içeren satırları üzerinde sp.lit bir regex) (birinci patlayabilir yerine () preg_split kullanabilirsiniz