数据库数据表某个字段的内容如下
a:1:{s:4:"sale";a:3:{s:10:"enoughfree";i:1;s:11:"enoughorder";d:696969;s:11:"enoughareas";s:0:"";}}
PHP文件取值代码如下
'by' => (!(empty($goods['detail_by'])) ? $goods['detail_by'] : $shop['set'])
取得的值是整个字段的值,问PHP代码要怎么写,才能只取696969这个值呢
这是什么数据格式。没看懂
补充:数据库实现时,这个地方少了个‘set’:
if(location < 1 or str is null or str = '' or split = '') then
set result = '';
else
以下是通过java语言实现,php中可以使用类似方法进行替换:
String a = "a:1:{s:4:\"sale\";a:3:{s:10:\"enoughfree\";i:1;s:11:\"enoughorder\";d:696969;s:11:\"enoughareas\";s:0:\"\";}}";
// 使用正则表达式查找
Pattern pat = Pattern.compile("d:\\d{6,}+;");
Matcher mat = pat.matcher(a);
while (mat.find()) {
System.out.println(mat.group());
}
// 若字符串格式定长,可使用如下方法
System.out.println(a.split(";")[4]);
// 若数字定长,可使用如下方法
System.out.println(a.substring(a.indexOf("d:"), a.indexOf("d:")+9));
可自定义数据库函数,查询时直接获取指定字符串数值:
/* 参数说明:str 待解析字符串;split 分隔符;location 待获取字符中分隔符位置 */
create function getSpecialStr(str varchar(300), split char(2), location int(2))
returns varchar(32)
begin
-- 最终结果
declare result varchar(32) default '';
-- 第一次截取字符串结果
declare firstInd varchar(300) default '';
-- 第二次截取字符串结果
declare secondInd varchar(300) default '';
-- 判断传入参数
if(location < 1 or str is null or str = '' or split = '') then
result = '';
else
set firstInd = substring_index(str, split, location);
set secondInd = substring_index(str, split, location-1);
set result = substr(firstInd, length(secondInd), firstInd);
end if;
return result;
end;
取出来,先反序列化然后再取值