我有一些以=
分隔的字符串形式存储的日期值(每个日期值后带有&
符号)。
我的$_POST['dates']
字符串如下:
23.08.18=&22.08.18=&21.08.18=
在将以下日期插入数据库表之前,我正在尝试以下PHP代码提取日期。该代码目前无法正常工作。
foreach(explode('&', $_POST['dates']) as $value)
{
$value1 = explode('=', $value);
foreach ($value1 as $x) {
}
}
如何隔离日期值?
答案 0 :(得分:3)
您可能正在寻找的功能是parse_str()
。您有一个带键但没有值的有效查询字符串(well, kind of),因此只需要解析它并隔离键(日期)。不幸的是,解析器将您的点转换为下划线。
代码:(Demo)
$string = '23.08.18=&22.08.18=&21.08.18=';
parse_str($string, $out);
var_export(array_keys($out));
输出:
array (
0 => '23_08_18',
1 => '22_08_18',
2 => '21_08_18',
)
当然,您可以使用str_replace()
来修复修改后的日期值。 See this demo。
或者,如果您想忽略parse_str()
,则可以只使用一个正则表达式调用来将=
上的字符串除以可选的&
:
代码:(Demo)
$string = '23.08.18=&22.08.18=&21.08.18=';
var_export(preg_split('~=&?~', $string, -1, PREG_SPLIT_NO_EMPTY));
输出:
array (
0 => '23.08.18',
1 => '22.08.18',
2 => '21.08.18',
)
或者没有正则表达式,只需修剪最后一个=
并在=&
上爆炸:(Demo)
$string = '23.08.18=&22.08.18=&21.08.18=';
var_export(explode('=&', rtrim($string, '=')));
// same output as preg_split()
答案 1 :(得分:0)
<?php
$data = '23.08.18=&22.08.18=&21.08.18=';
//$delimiters has to be array
//$string has to be array
function multiexplode ($delimiters,$string) {
$ary = explode($delimiters[0],$string);
array_shift($delimiters);
if($delimiters != NULL) {
foreach($ary as $key => $val) {
$ary[$key] = multiexplode($delimiters, $val);
}
}
return $ary;
}
$exploded = multiexplode(array("=","&"),$data);
var_dump($exploded);
结果应为:
array (size=3)
0 => string '23.08.18' (length=8)
2 => string '22.08.18' (length=8)
4 => string '21.08.18' (length=8)
我们需要使用array_filter
。
http://php.net/manual/en/function.explode.php
[EDIT] mickmackusa的答案是将url参数解析为变量的正确工具。