【问题标题】:Why is my foreach loop returning an extra index position?为什么我的 foreach 循环返回一个额外的索引位置?
【发布时间】:2018-09-20 00:39:30
【问题描述】:

我正在从 .txt 中提取文本,我分解该行然后重新分解它,以便将其存储为一个数组。当我在第二次爆炸后 print_r 输出一个具有第四个索引位置的数组时,它应该只有 0 1 2 3。任何想法为什么? 任何帮助表示赞赏,谢谢。

PHP

 list($title, $author, $publisher, $isbn) = explode('*', $line);

    print_r($line); //outputs a string


    $books = explode('*', $line);
    echo "<br>";
    print_r($books); //outputs array with extra index position.

输出样本

Array ( [0] => Business 101 [1] => John Smith[2] => 2002-07-18 [3] => 1-444-2589-x [4] => )

.txt 文件中的行示例

Business 101*John Smith*2002-07-18*1-444-2589-x*

【问题讨论】:

  • $line 中是否有尾随 *
  • 是的,在文本文件的行尾有一个 *。为什么?
  • 当你分解它时,它会产生 all 分隔符之外的字符串,所以在这种情况下,它会在最后一个 * 后面看到一个空字符串,它会返回到数组中。跨度>
  • 您实际尝试做的是实现自己的文件格式。不建议这样做。你能举个例子吗?

标签: php


【解决方案1】:

请分享$line的内容,我可以尽力帮助你。

我想只有一种解释:$line 有更多你期望的值。

如果您从文件(例如,CSV 文件)中导入数据,这将是全面的。

那么,看看有没有这样的东西:

BookName*Author*PublishDate*ISBN*

你看到最后一个*了吗?这就是问题所在。

Explode 函数读取最后一个 * 并在数组中创建另一个字段。

如果你想解决这个问题,你可以去掉最后一个 *,或者只是给你的 explode 函数传递一个限制(3 是数字,试试看)。

array explode(string $delimiter, string $string, int $limit);

希望对你有帮助。

最好的问候。

【讨论】:

  • 我尝试在限制中输入 3,但出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多