Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用“分解”拆分数组值_Php_Arrays_String - Fatal编程技术网

Php 使用“分解”拆分数组值

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

在将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 (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那么你认为他问了什么?他需要什么样的结果,你会得到完全相同的答案。问题在哪里。在没有测试代码的情况下,您对这个答案投了否定票。谢谢您的回答-各位