【问题标题】:PHP Multidimensional array with explode() splits wrong带有explode()的PHP多维数组拆分错误
【发布时间】:2021-05-09 06:13:17
【问题描述】:

我有一个名为 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];

【问题讨论】:

  • 您似乎在正斜杠 / 而不是逗号 , 上爆炸
  • 谢谢,已经编辑好了!只是将代码复制到stackoverflow的问题,但不幸的是没有解决我的问题;)
  • 您是否在echo $tablerow[0][1]; 中错误地使用了$tablerow 而不是$tablecolumn
  • $tablerow 是“外部”数组(第一级),而 tablecolumn 是“内部”。如果我想在一个数组中寻址一个数组,我需要使用外部数组并指定位置,据我所知。然而,尝试 $tablecolumn 会引发错误:“警告:未初始化的字符串偏移量 1”
  • 顺便说一句:如果我尝试$tablerow[0]; 我会得到整个“第一组”

标签: php arrays multidimensional-array split explode


【解决方案1】:

$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

【讨论】:

    【解决方案2】:

    这要容易得多。只需 explode、循环和 explode 创建一个包含列数组的新行数组:

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

    【讨论】:

    • one-liner:$result = array_map(fn($e) =&gt; explode(',', $e), explode('#', $alldata));
    【解决方案3】:

    在通过# 分解数据后,您也可以使用str_getcsv

    array_map 将用给定函数str_getcsv 的返回值替换每个元素。

    $alldata = 'audi,bmw,mercedes#volvo,fiat,seat#A,B,C';
    
    $data = array_map('str_getcsv', explode('#', $alldata));
    

    工作example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 2018-02-27
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多