我打算将几个文件复制到数据库中,将信息分隔在几个表中。所以我需要分解每一行以相应地分隔信息。
当我只使用一个空格分隔信息时,它工作正常,但是现在我有很多文件,其中一些文件由空格、分号或在某些情况下的选项卡分隔。我在插入开始之前读取的另一个表中有分隔字符。
当我有一个需要爆炸的't
时,我的问题就会上升。如果我强制爆炸功能,例如:
$line = explode("'t", trim($file[$j]));
它工作得很好。但是,当我尝试使用动态方式时:$rows['separator']
包含" "
,;
或't
。
$line = explode($rows['separator'], trim($file[$j]));
" "
和;
工作正常,但't
不能。谁能告诉我为什么我似乎不能做到这一点?或者我该如何解决这个问题?
我也尝试使用preg_split函数:
$line = preg_split($rows['separator'], trim($file[$j]));
但只设法得到以下错误:
Warning: preg_split(): Delimiter must not be alphanumeric or backslash
使用 preg_splt 时,应添加一些斜杠来分隔模式:
$line = preg_split('/' . $rows['separator'] . '/', trim($file[$j]));
您遇到的问题是双重的。
explode($separator, trim($file[$j]))
不起作用,因为它试图在"反斜杠和 t"(两个单独的字符彼此之后)(= ''t'
)上拆分。要使其正常工作,它需要在制表符 (= "'t"
) 上拆分。不同之处在于单引号是"哑的",即它们将't
视为两个单独的字符,而双引号是"智能"的,即它们将't
视为单个字符"制表符"。
preg_split($separator)
不起作用,因为它需要模式的一些分隔符,例如 /
.即使在简单的事情上分裂也是如此,例如'a'
.
对于这个特定问题,explode()
是更合适的解决方案(更简单且速度稍快)。如果将 $rows['separator']
中的字符更改为 "'t"
(无论从何处获取该值),explode()
应该有效。