2012-02-16 74 views
0

我的代碼從文件中讀取一行,將行拆分爲元素,並且應該將元素放入數組中。我使用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

什麼數據你在其他'陣列'部分?例如數組[0],數組[1],數組[2],數組[4]等是什麼? – Ryan 2012-02-16 18:59:05

回答

1

它總是按順序放置它們。如果您看到這種行爲,那麼您必須在文檔中有額外的,這些文件在空數組元素中重新排序時將被分解。您將需要預處理字符串或修剪數組中的空元素。

或者,您可以使用preg_splitPREG_SPLIT_NO_EMPTY設置。

的那個球例子,你正在嘗試做的:

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

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

有什麼辦法讓代碼知道忽略所有空的一行中的數字之間的空格?用戶創建原始文件,他們可以在數字之間放置一個或多個空格。一般用戶輸入沒有限制。 – BlueSky 2012-02-16 19:06:58

+0

不是爆炸......你不得不使用'preg_split'作爲我的建議,或者在使用爆炸之前清理字符串,或者在使用之後清理數組。 – prodigitalson 2012-02-16 19:09:06

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 2012-02-16 19:41:29