人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のファイル名で
testディレクト配下に
test.csvと1234_456_789_11111111というファイルがあります。
PHPのプログラムで、そのtestディレクトリをOPENします。
それで、$testにファイル名が来ます。
そのファイル名を以下のようなロジックで_で区切りたいと思います。
list($aa,$bb,$cc,$dd) = explode("_",$test);
if (!ereg('.csv', $file_name) && ereg("^[0-9]+$", $aa) && ereg("^[0-9]+$", $bb) && ereg("^[0-9]+$", $cc)) {

}
ですが、
PHP Notice: Undefined offset: 3 in
PHP Notice: Undefined offset: 2 in
PHP Notice: Undefined offset: 1 in
PHP Notice: Undefined offset: 3 in
PHP Notice: Undefined offset: 2 in
PHP Notice: Undefined offset: 1 in

というメッセージが出ます。
どうしたらいいのでしょうか??

●質問者: hopefully
●カテゴリ:就職・転職 コンピュータ
✍キーワード:AA BB CC CSV DD
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●27ポイント

$test に正しくファイル名が入っていないのではないでしょうか。

print "TEST = $test<BR>\n";
$myList = explode( "_", $test );
print "ARRAY NUM = ". sizeof($myList)."<BR>\n";

のように、正しく配列に入っているか、explodeで期待通りに分割できるかを確認してみてはどうでしょうか。

◎質問者からの返答

これで、csvまで読み込んでました。

すいません。

ありがとうございます。


2 ● ratbeta
●27ポイント

恐らく$test = "test.csv";としたときに問題が発生するのだと思いますが、

list($aa,$bb,$cc,$dd) = explode("_",$test);

の部分を

$fpart = explode("_", $test);

if (count($fpart) == 4) list($aa, $bb, $cc, $dd) = $fpart;

とするか、すべてのコードを、

$fpart = explode("_", $test);

if (! strstr('.csv', $file_name) && ereg("^[0-9]+$", $fpart[0]) && ereg("^[0-9]+$", $fpart[1]) && ereg("^[0-9]+$", $fpart[2])) {

...

}

とすれば良いと思います。

# 蛇足ながら、ereg_*よりもpreg_matchなどを用いる方が高速です。

◎質問者からの返答

大丈夫になりました。www

ありがとうございます。


3 ● ito-yu
●26ポイント
if (!ereg('.csv', $file_name)){
 list($aa,$bb,$cc,$dd) = @explode("_",$test);
 if(ereg("^[0-9]+$", $aa) &amp;&amp; ereg("^[0-9]+$", $bb) &amp;&amp; ereg("^[0-9]+$", $cc)) {
 
 }
}

explode()の前に@を付けるだけでもいいんでしょうが、そもそもcsvの時はexplode()する必要がないのでこうするのがスマートではないでしょうか

◎質問者からの返答

なるほどwww

勉強になりますねwww

ありがとうございますwww

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ