Php 使用“分解”拆分数组值
在将txt文件的内容加载到Php 使用“分解”拆分数组值,php,arrays,string,Php,Arrays,String,在将txt文件的内容加载到$str后,我需要在$str中对空格使用explode函数,但它似乎不起作用: $filename='acct.txt'; $str=file_get_contents($filename); print_r (explode("\t",$str)); 输出: Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 ) print_r (e
$str
后,我需要在$str
中对空格使用explode函数,但它似乎不起作用:
$filename='acct.txt';
$str=file_get_contents($filename);
print_r (explode("\t",$str));
输出:
Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 )
print_r (explode(" ",$str));
Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 )
输出:
Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 )
print_r (explode(" ",$str));
Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 )
该文件包含以下内容:
101 345.23
102 43.2
103 0
104 33
我应该如何更改它以一次获取一个元素?
即:
谢谢你的帮助 您可以使用
fgets()
逐行读取文件。获取一行数组,然后将其展平。可能有更多的捷径,但这对我来说很有效
<?php
function flatArray($array) {
$arrayValues = array();
foreach (new RecursiveIteratorIterator( new RecursiveArrayIterator($array)) as $val) {
$arrayValues[] = $val;
}
return $arrayValues;
}
$handle = fopen("acct.txt", "r");//YOur file location
$rows = array();
if ($handle) {
while (($str = fgets($handle)) !== false) {
// process the line read.
$rows[] = explode(" ",$str);
}
fclose($handle);
} else {
// error opening the file.
}
$flatarray = flatArray($rows);
var_dump($flatarray);
答案是,如果您有多个delimeter(换行符和空格),则必须使用preg_split函数而不是explode。因此,您的代码应该如下所示:
$filename='acct.txt';
$str=file_get_contents($filename);
print_r (preg_split( '/( |\r\n|\r|\n)/', $str ));
它将要打印:
Array ( [0] => 101 [1] => 345.23 [2] => 102 [3] => 43.2 [4] => 103 [5] => 0 [6] => 104 [7] => 33 )
编辑:
Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 )
print_r (explode(" ",$str));
Array ( [0] => 101 [1] => 345.23 102 [2] => 43.2 103 [3] => 0 104 [4] => 33 )
尽管上面的正则表达式可以很好地工作,但在中使用类似的东西要简单得多:
preg_split( '/(\s+)/', $str )
它具有完全相同的输出,但更加优雅。首先使用\n
分解,然后使用空空间“
使用foreach of SourceRemember,最后一个数组值不是[8]=>33,而是[7]=>33。数组键以0开头。编写一些代码,一个for循环和一个foreach。感谢Toby Allen、Saurabh和Amit这不是他要问的问题。@TobyAllen那么你认为他问了什么?他需要什么样的结果,你会得到完全相同的答案。问题在哪里。在没有测试代码的情况下,您对这个答案投了否定票。谢谢您的回答-各位