2012-02-16 49 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