PHP 带 explode() 的多维数组拆分错误

PHP Multidimensional array with explode() splits wrong

我有一个名为 data.txt 的文件,其中包含以下内容:(三组,每组包含三辆汽车)

"audi,bmw,mercedes#volvo,fiat,seat#peugeot,..." 

等等,你懂的。

使用 php explode() 通过 # 拆分“组”效果非常好。但是,当我尝试按 komma 拆分组时,它无法按我希望的方式工作:

对于“$tablerow[0][1];”我只得到字母“u”(第二个字母)而不是“bmw”(预期的第二个词)。

我的错误在哪里(下面的代码)?

$index_number 只是计算这些组的数量。

$datafile = fopen("data.txt","r"); <br>
$alldata = fread($datafile,filesize("data.txt")); <br>
$tablerow = explode("#",$alldata); <br>

for ($arrayposition = 0; $arrayposition <= $index_number; ++$arrayposition) { <br>
for ($tablerowindex = 0; $tablerowindex <= 3; ++$tablerowindex) { <br>
$tablecolumn = explode(",",$tablerow[$tablerowindex]); <br>
} <br>
} <br>
echo $tablerow[0][1];

容易多了。只是 explode、循环和 explode 创建一个新的行数组和一个列数组:

$tablerow = explode("#", $alldata);

foreach($tablerow as $row) {
    $result[] = explode(',', $row);
}

$tablerow = explode("#",$alldata);$tablerow之后是逗号分隔的汽车数组。例如$tablerow[0] == 'audi,bmw,mercedes'.

稍后您遍历该数组并拆分每个元素。但是你不要再碰 $tablerow 了。 $tablerow 保持原样。所以 $tablerow[0][1] 引用第一个元素的第二个字符,即 "u"

你可能需要的是

$alldata='audi,bmw,mercedes#volvo,fiat,seat#peugeot';
$table = [];
foreach (explode("#", $alldata) as $carGroup) {
    $table[] = explode(",", $carGroup);
}

// $table[0][0] => audi
// $table[0][1] => bmw

通过#展开数据后,您也可以使用str_getcsv

array_map 将用给定函数 str_getcsv.

的 return 值替换每个元素
$alldata = 'audi,bmw,mercedes#volvo,fiat,seat#A,B,C';

$data = array_map('str_getcsv', explode('#', $alldata));

工作example