我有几个文件要打算复制到数据库,将信息分成几个表。所以我需要分解每一行来相应地分离信息。
当我只使用一个分隔信息的空间时它工作正常,但是现在我有很多文件,其中一些是空格,半冒号或某些情况下的标签。我在插入开始之前读取的另一个表中有分隔字符。
当我有\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
答案 0 :(得分:2)
使用preg_splt时,您应该添加一些斜杠来分隔模式:
$line = preg_split('/' . $rows['separator'] . '/', trim($file[$j]));
答案 1 :(得分:1)
你遇到的问题是双重的。
explode($separator, trim($file[$j]))
不起作用,因为它试图拆分'反斜杠和t'(两个单独的字符在彼此之后)(= '\t'
)。要使其工作,需要拆分制表符(= "\t"
)。区别在于单引号是“哑”,即它们将\t
视为两个单独的字符,而双引号是“智能”,即它们将\t
视为单个字符“标签”。 / p>
preg_split($separator)
不起作用,因为它需要对模式进行一些分隔,例如/
。即使在分割简单的内容时也是如此,例如'a'
。
对于这个特殊问题,explode()
是更合适的解决方案(更简单,更快)。如果您将$rows['separator']
中的字符更改为"\t"
(无论从哪里获取该值),explode()
都应该有效。