Php 为什么按空格爆炸在某些空格字符串中不起作用

Php 为什么按空格爆炸在某些空格字符串中不起作用,php,arrays,explode,Php,Arrays,Explode,我已经从上面的网站输出了数据,然后我想把这些数据分解成这样的数组输出,array([0]=>2[1]=>2019-11-21[2]=>21:51:24[3]=>0[4]=>11[5]=>2019-11-25[6]=>13:32:06[7]=>0[8]=>11[9]=>2019-11-25[10]=>13:36:31[11]=>0[12]=>1 1234[13]=>2019-11-25[15]=> => 1 ); 但是当我试着像这样运行输出时 2 2019-11-21 21:51:24 0

我已经从上面的网站输出了数据,然后我想把这些数据分解成这样的数组输出,
array([0]=>2[1]=>2019-11-21[2]=>21:51:24[3]=>0[4]=>11[5]=>2019-11-25[6]=>13:32:06[7]=>0[8]=>11[9]=>2019-11-25[10]=>13:36:31[11]=>0[12]=>1 1234[13]=>2019-11-25[15]=> => 1 );

但是当我试着像这样运行输出时

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    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
)


请尝试下面的代码。它起作用了

$string = '2   2019-11-21 21:51:24 0   1';
$singleSpace = preg_replace('!\s+!', ' ', $string);
$explodeData = explode(" ",$singleSpace);

它们不是空格,而是选项卡。我希望这是四个选项卡分隔的字段

$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));
}

用空格替换\n(换行符)或多个空格,然后用空格分解。如果不起作用,输出
数组([0]=>2 2019-11-21[1]=>21:51:24 0 1[2]=>3]=>1 2019-11-25[4]=>13:32:06 0 1[5]=>1 2019-11-25[7]=>13:36:31 0 1[8]=>9]=>1234 2019-11-25[10]=>13:38:55 0 1)
2 2019-11-21之间仍有未爆炸的空间使用选项卡空间,然后尝试使用替换空间\t如果它看起来和闻起来像CSV,则将其视为CSV。与数组数组(记录数组)相比,您所需的数组看起来更难处理和使用。
 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));
}
$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);