【发布时间】:2019-05-14 11:41:06
【问题描述】:
我得到了这个项目,用户可以填写表格来解决与工作相关的问题,我被要求获取每个人填写的信息,以便他们可以看到他们发送的所有表格,但仅此而已存储在一个数据库列中,我不确定是否能够拆分这个长字符串。
首先,这是保存到数据库中的字符串:
a:20:{s:12:"cfdb7_status";s:6:"unread";s:9:"-name";s:0:"Alvaro";s:13:"-lastname";s:0:"Alvaro";s:10:"-email";s:19:"mail@mail.es";s:15:"-tipoconsul";s:10:"Vacaciones";s:13:"-fecharec";s:10:"2018-08-09";s:14:"-fechaalta";s:10:"2017-11-01";s:18:"-CategoriaProf";s:19:"Tecnico electronico";s:18:"-NombreEmpresa";s:30:"Inversiones Tecnicas G&F S.L. ";s:21:"-ActividadEmpresa";s:29:"venta de equipos electronicos";s:18:"-DireccEmpresa";s:15:"calle falsa 123";s:15:"-telEmpresa";s:9:"555555555";s:20:"-ContactoEmpresa";s:6:"Alvaro";s:16:"-Comentarios";s:8:"Probando";s:18:"-comunicacion1";s:0:"";s:18:"-comunicacion2";s:0:"";s:9:"-nom1";s:0:"";s:9:"-nom2";s:0:"";s:13:"-contrat1";s:0:"";s:13:"-contrat2";s:0:"";}
在本例中,我需要获取以下信息才能显示:
“阿尔瓦罗”
“阿尔瓦罗”
- “mail@mail.es”
- “Vacaciones”
- “2018-08-09”
- “2017-11-01”
- “Tecnico 电子”
- “Inversiones Tecnicas G&F S.L.”
- “电子设备输出”
- “calle falsa 123”
- “555555555”
- “阿尔瓦罗”
- “普罗班多”
- comunicacion1 和 comunicacion2(在本例中为空)
- 以下所有 nom 和 contrat 字段
我已经尝试过多次分解字符串,但是没有很好的分隔符可以这样做,此时我想我已经尝试了所有可能的组合 : ; _ " "
<?php
$info = explode(" ", $resultado->form_value);
$i = 0;
$j = 0;
while ($i < count($info)) {
// echo $info[$i];
$info2 = explode("_", $info[$i]);
while ($j < count($info2)) {
echo $info2[$j];
$j++;
}
$i++;
}
?>
这是我去过的最接近的一个,但是正如你所看到的,还有很多信息没有出现在最终的字符串中
我不太了解正则表达式,我试过创建一个,但我不太了解语法,也不知道这个字符串是否可以用它所具有的所有标点符号进行拆分。 再次感谢您的时间和耐心,非常感谢我能得到的所有帮助!
【问题讨论】:
-
尝试使用
unserialize(),你会得到一个数组 -
除非序列化数据似乎已损坏。在发布之前你有没有对它做任何事情
-
如果由于序列化数组已损坏而无法使
unserialize工作,您可以在双引号上拆分,然后遍历您的数组,仅获取所有其他项目 (%2 =0)。 -
这最初是在像 UTF-8 这样的多字节字符集中吗?不知何故,它在小提琴过程中的某个地方被转换为简单的 ascii?
-
谢谢大家!正如你所说,我只需要使用 unserialize() 方法,直到现在我才知道。它对我来说很好,所以我可能在复制它时犯了一个错误。再次感谢您的快速回答@RiggsFolly 和 JNevill!
标签: php regex database string split