表示 - php ファイル読み込み 1行 配列



PHP-txtファイルの解析 (6)

fgetcsv() explode()またはfgetcsv()使用してください:

$values = explode('^', $string);

または、あなたが何か良いものを望むなら、

$data = array();
$firstLine = true;
foreach(explode("\n", $string) as $line) {
    if($firstLine) { $firstLine = false; continue; } // skip first line
    $row = explode('^', $line);
    $data[] = array(
        'id' => (int)$row[0],
        'name' => $row[1],
        'description' => $row[2],
        'images' => explode(',', $row[3])
    );
}

私は以下の詳細を持つ.txtファイルを持っています:

ID^NAME^DESCRIPTION^IMAGES
123^test^Some text goes here^image_1.jpg,image_2.jpg
133^hello^some other test^image_3456.jpg,image_89.jpg

私がしたいのは、この広告を構文解析して、可能であれば値をより読みやすい形式にすることです。

ありがとう


Answer #1

あなたはこれを簡単にこのようにすることができます

$txt_file    = file_get_contents('path/to/file.txt');
$rows        = explode("\n", $txt_file);
array_shift($rows);

foreach($rows as $row => $data)
{
    //get row data
    $row_data = explode('^', $data);

    $info[$row]['id']           = $row_data[0];
    $info[$row]['name']         = $row_data[1];
    $info[$row]['description']  = $row_data[2];
    $info[$row]['images']       = $row_data[3];

    //display data
    echo 'Row ' . $row . ' ID: ' . $info[$row]['id'] . '<br />';
    echo 'Row ' . $row . ' NAME: ' . $info[$row]['name'] . '<br />';
    echo 'Row ' . $row . ' DESCRIPTION: ' . $info[$row]['description'] . '<br />';
    echo 'Row ' . $row . ' IMAGES:<br />';

    //display images
    $row_images = explode(',', $info[$row]['images']);

    foreach($row_images as $row_image)
    {
        echo ' - ' . $row_image . '<br />';
    }

    echo '<br />';
}

最初に関数file_get_contents()を使ってテキストファイルを開き、関数file_get_contents()を使って改行文字の文字列を切ります。 このようにして、すべての行が別々の配列になります。 次に、関数array_shift()を使用して、ヘッダのように最初の行を削除することができます。

行を取得したら、配列をループしてすべての情報を$infoという新しい配列に格納できます。 行0から始まる行ごとに情報を得ることができます。 例えば、 $info[0]['description']ようになりSome text goes here

イメージを配列に入れたい場合は、 explode()も使用できます。 最初の行にこれを使ってください: $first_row_images = explode(',', $info[0]['images']);


Answer #2

さて、編集されたバージョンは表示されませんでしたので、ここでやり直しています。 それはセパレータとしてキャレットを使用するCSVファイルの可能性が最も高いです...

$fh = fopen('yourfile.txt');
$headers = fgetcsv($fh, 0, '^');
$details = array();
while($line = fgetcsv($fh, 0, '^')) {
   $details[] = $line;
}
fclose($fh);


Answer #4

文字列を分解した後にリストを作成し、 "image_1.jpg、image_2.jpg"を分割します:

list($number, $status, $text, $images) = explode("^", $data);

$splited_images= preg_split(',', $images);

Answer #5

私の解決策

function parseTextFile($file){
    if( !$file = file_get_contents($file))
        throw new Exception('No file was found!!');
    $data = [];
    $firstLine = true;
    foreach(explode("\n", $file) as $line) {
        if($firstLine) { 
            $keys=explode('^', $line);
            $firstLine = false; 
            continue; 
        } // skip first line
        $texts = explode('^', $line);
        $data[] = array_combine($keys,$texts);
    }
    return $data;
}




text-parsing