2012-02-16 13 views
0

私のコードは、ファイルから行を読み込み、行を要素に分割し、要素を配列に格納することになっています。explode関数を使用して文字列を読み取る

私はexplodeを使用しましたが、要素を順番に配列に入れません。

例:入力用

line: 1000 3000 5000 

これは何が起こるかである

$a=fgets($file); // $a= 1000 3000 5000 
$arr= explode(" ",$a); 
$u=$arr[3]; // $u=1000 
$w=$arr[6]; // $w=3000 
$x=$arr[10]; // $x=5000 

これは、所望の順序:

$u=$arr[0]; // $u=1000 
$w=$arr[1]; // $w=3000 
$x=$arr[2]; // $x=5000 

なぜ配列にないexplodeプットデータを順次行い?

+0

他の 'array'部分にはどのようなデータがありますか?例えば'array [0]'、 'array [1]'、 'array [2]'、 'array [4]'などにあるもの... – Ryan

答えて

1

常にそれを順番に入れます。この動作が表示されている場合は、空の配列要素に再配置する際に、文書内に余分なが展開されている必要があります。文字列を前処理したり、空の要素を配列から削除したりする必要があります。

また、PREG_SPLIT_NO_EMPTYの設定でpreg_splitを使用することもできます。あなたがやろうとしていることの

ドーム例:あなたの例で

// using regex 
$arr = preg_split("/ /", $a, PREG_SPLIT_NO_EMPTY); 

// pruning the array 
$arr = explode(" ", $a); 
$arr = array_keys($a, ''); 
+0

はすべての空を無視するようにコードに知らせる方法です行間の数字の間にスペースがありますか?ユーザーは元のファイルを作成し、数字の間に空白スペースを1つ以上置くことができます。一般的なユーザー入力の制限はありません。 – BlueSky

+0

爆発しないでください...あなたは 'preg_split'を使ってそれを提案するか、またはexplodeを使う前に文字列をクリーンアップしなければなりません。あるいは、使用後に配列をクリーンアップしてください。 – prodigitalson

0

、すべてのスペースごとに新しい配列のエントリを置くために起こっています。

は、あなたが探しているものを取得するには、返される文字列がなければならないであろう「$ U = 1000_ $ W = 3000_ $ X = 5000」

0

これを実行する別の方法(アンダースコアは、ここではスペースを表します)空の要素を削除するためにarray_filterを使用することになります。

$arr = explode(' ', $a); // split string into array 
$arr = array_filter($arr); // remove empty elements from array 
$arr = array_values($arr); // strip old array keys giving sequential numbering, i.e. 0,1,2 
+0

ありがとうございました。すべての提案がうまくいった! – BlueSky

関連する問題