dポイントプレゼントキャンペーン実施中!

PHP超初心者ですみません。

aaa:111
bbb:222
ccc:333
444444
という内容のテキストファイルをPHPで読み込み
aaa(変数名)=111(中身)
bbb(変数名)=222(中身)
ccc(変数名)=333\n444444(中身改行あり)
という風にできないのでしょうか?

いろいろ探しましたがわからなかったので
よろしくお願い致します。

A 回答 (3件)

まず、そのテキストファイルでは、


aaa:111\n
bbb:222\n
ccc:333\n
444444

となっています。
テキストを読み込み、改行で区別するのに
「333\n444444」だけ改行を区別しないというのは面倒だと思います。

なので、444444の書き方が「xxx:xxx」になっていない場合のみ前の変数にくっつけるようにしなくてはいけません。

<?
$text = file("test.txt");

foreach($text as $value){
if(preg_match('/^[0-9A-Za-z]+:[0-9A-Za-z]+(\r\n|\r|\n)$/', $value)){
list($key,$var) = explode(":", $value);
$$key = $var;
}else{
$$key .= $value;
}
}

echo $aaa;
echo $bbb;
echo $ccc;
?>

こんな感じに・・・。
具体的に何がしたいのかわからないのですが、やり方を変えることをお勧めします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そんな感じです。
具体的に書いていただきありがとうございます。

お礼日時:2007/09/14 13:21

テキストファイルのフォーマットは固定なのでしょうか?


もし固定でなければ、私が良く使うパターンですが

[data.php等の名前で保存]
<?php
 $aaa="111";
 $bbb="222";
 $ccc="333\n4444";
?>
としてファイルを作り

必要なスクリプト内で
require_once("data.php");
として読み込めばそのまま変数として使用できます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返事が遅くなりまして申し訳ございません。
残念ながら固定のテキストなのです。
他の方法を考えてみたいと思います。

お礼日時:2007/09/19 14:49

あまり効率的ではないかもしれませんがこんな感じでどうでしょう?



<?PHP
$handle = fopen("test.csv", "r");
while (($row = fgetcsv($handle, 1000, ":")) !== FALSE) {
$data[]=$row;
}
fclose($handle);

foreach($data as $array){
if(count($array)==2){
$var=$array[0];
$vars[$var]=$array[1];
}else{
$vars[$var]=$vars[$var]."\n".$array[0];
}
}
extract($vars);
?>

//test.csv
aaa:111
bbb:222
ccc:333
444444
55555
ddd:666
777
888
eee:
999


ちなみにこのようなデータ管理の仕方は致命的なバグを起こしかねないので
運用方法を考えなおしたほうがいいと思いますけどね・・・
    • good
    • 0
この回答へのお礼

ありがとうございます。
できなくはないが致命的なバグをおこすかも・・・とのご指摘ですので
考えなおしてみます。

お礼日時:2007/09/14 13:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!