为什么按 space 爆炸在某些 space 字符串中不起作用
Why explode by space not work in some space string
2 2019-11-21 21:51:24 0 1
1 2019-11-25 13:32:06 0 1
1 2019-11-25 13:36:31 0 1
1234 2019-11-25 13:38:55 0 1
我有像上面这样的网站输出数据,然后我想把这些数据分解成这样的数组输出,Array ( [0] => 2 [1] => 2019-11-21 [2] => 21:51:24 [3] => 0 [4] => 1 1 [5] => 2019-11-25 [6] => 13:32:06 [7] => 0 [8] => 1 1 [9] => 2019-11-25 [10] => 13:36:31 [11] => 0 [12] => 1 1234 [13] => 2019-11-25 [14] => 13:38:55 [15] => 0 [16] => 1 );
但是当我尝试 运行 输出时
Array
(
[0] => 2 2019-11-21
[1] => 21:51:24 0 1
[2] =>
[3] => 1 2019-11-25
[4] => 13:32:06 0 1
[5] =>
[6] => 1 2019-11-25
[7] => 13:36:31 0 1
[8] =>
[9] => 1234 2019-11-25
[10] => 13:38:55 0 1
)
为什么有些 space 没有爆炸?
首先你需要用单个 space 替换多个 space 然后对结果执行爆炸
$string = '2 2019-11-21 21:51:24 0 1';
$singleSpace = preg_replace('!\s+!', ' ', $string);
$explodeData = explode(" ",$singleSpace);
请尝试以下代码。有效。
echo "<pre>";
$data = '2 2019-11-21 21:51:24 0 1
1 2019-11-25 13:32:06 0 1
1 2019-11-25 13:36:31 0 1
1234 2019-11-25 13:38:55 0 1';
$newData = explode(" ",str_replace(PHP_EOL," ",$data));
foreach($newData as $k => $v) {
if($v == null) {
unset($newData[$k]);
}
}
print_r(array_values($newData));
以上代码的输出为:
Array
(
[0] => 2
[1] => 2019-11-21
[2] => 21:51:24
[3] => 0
[4] => 1
[5] => 1
[6] => 2019-11-25
[7] => 13:32:06
[8] => 0
[9] => 1
[10] => 1
[11] => 2019-11-25
[12] => 13:36:31
[13] => 0
[14] => 1
[15] => 1234
[16] => 2019-11-25
[17] => 13:38:55
[18] => 0
[19] => 1
)
它们不是空格而是制表符。我希望这是四个制表符分隔的字段。
$tsv = <<<"CSV"
2\t2019-11-21 21:51:24\t0\t1
1\t2019-11-25 13:32:06\t0\t1
1\t2019-11-25 13:36:31\t0\t1
1234\t2019-11-25 13:38:55\t0\t1
CSV;
echo $tsv, "\n\n";
foreach(explode("\n", $tsv) as $line) {
var_dump(explode("\t", $line));
}
如果加载文件,您可以提供分隔符 fgetcsv
:
$fh = fopen($file, 'rb');
while($line = fgetcsv($fh, 0, "\t")) {
var_dump($line);
}
$data = "2 2019-11-21 21:51:24 0 1";
$output = preg_replace('/\s+/',' ', $data);
$data = explode(" ",$output);
print_r($data);
2 2019-11-21 21:51:24 0 1
1 2019-11-25 13:32:06 0 1
1 2019-11-25 13:36:31 0 1
1234 2019-11-25 13:38:55 0 1
我有像上面这样的网站输出数据,然后我想把这些数据分解成这样的数组输出,Array ( [0] => 2 [1] => 2019-11-21 [2] => 21:51:24 [3] => 0 [4] => 1 1 [5] => 2019-11-25 [6] => 13:32:06 [7] => 0 [8] => 1 1 [9] => 2019-11-25 [10] => 13:36:31 [11] => 0 [12] => 1 1234 [13] => 2019-11-25 [14] => 13:38:55 [15] => 0 [16] => 1 );
但是当我尝试 运行 输出时
Array
(
[0] => 2 2019-11-21
[1] => 21:51:24 0 1
[2] =>
[3] => 1 2019-11-25
[4] => 13:32:06 0 1
[5] =>
[6] => 1 2019-11-25
[7] => 13:36:31 0 1
[8] =>
[9] => 1234 2019-11-25
[10] => 13:38:55 0 1
)
为什么有些 space 没有爆炸?
首先你需要用单个 space 替换多个 space 然后对结果执行爆炸
$string = '2 2019-11-21 21:51:24 0 1';
$singleSpace = preg_replace('!\s+!', ' ', $string);
$explodeData = explode(" ",$singleSpace);
请尝试以下代码。有效。
echo "<pre>";
$data = '2 2019-11-21 21:51:24 0 1
1 2019-11-25 13:32:06 0 1
1 2019-11-25 13:36:31 0 1
1234 2019-11-25 13:38:55 0 1';
$newData = explode(" ",str_replace(PHP_EOL," ",$data));
foreach($newData as $k => $v) {
if($v == null) {
unset($newData[$k]);
}
}
print_r(array_values($newData));
以上代码的输出为:
Array
(
[0] => 2
[1] => 2019-11-21
[2] => 21:51:24
[3] => 0
[4] => 1
[5] => 1
[6] => 2019-11-25
[7] => 13:32:06
[8] => 0
[9] => 1
[10] => 1
[11] => 2019-11-25
[12] => 13:36:31
[13] => 0
[14] => 1
[15] => 1234
[16] => 2019-11-25
[17] => 13:38:55
[18] => 0
[19] => 1
)
它们不是空格而是制表符。我希望这是四个制表符分隔的字段。
$tsv = <<<"CSV"
2\t2019-11-21 21:51:24\t0\t1
1\t2019-11-25 13:32:06\t0\t1
1\t2019-11-25 13:36:31\t0\t1
1234\t2019-11-25 13:38:55\t0\t1
CSV;
echo $tsv, "\n\n";
foreach(explode("\n", $tsv) as $line) {
var_dump(explode("\t", $line));
}
如果加载文件,您可以提供分隔符 fgetcsv
:
$fh = fopen($file, 'rb');
while($line = fgetcsv($fh, 0, "\t")) {
var_dump($line);
}
$data = "2 2019-11-21 21:51:24 0 1";
$output = preg_replace('/\s+/',' ', $data);
$data = explode(" ",$output);
print_r($data);