为什么 php 不爆炸提取数组值
Why isn't php explode extracting array values
我有一些日期值(每个都有一个尾随 =
符号)存储为 &
分隔的字符串。
我的 $_POST['dates']
字符串如下所示:
23.08.18=&22.08.18=&21.08.18=
我正在尝试使用以下 PHP 代码来提取日期,然后再将它们插入我的数据库 table。该代码目前无法正常工作。
foreach(explode('&', $_POST['dates']) as $value)
{
$value1 = explode('=', $value);
foreach ($value1 as $x) {
}
}
如何隔离日期值?
<?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
[编辑] mickmackusa 的答案是将 url 参数解析为变量的正确工具。
您可能要查找的函数是 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',
)
或者没有正则表达式,只是 trim 最后一个 =
并在 =&
上爆炸:(Demo)
$string = '23.08.18=&22.08.18=&21.08.18=';
var_export(explode('=&', rtrim($string, '=')));
// same output as preg_split()
我有一些日期值(每个都有一个尾随 =
符号)存储为 &
分隔的字符串。
我的 $_POST['dates']
字符串如下所示:
23.08.18=&22.08.18=&21.08.18=
我正在尝试使用以下 PHP 代码来提取日期,然后再将它们插入我的数据库 table。该代码目前无法正常工作。
foreach(explode('&', $_POST['dates']) as $value)
{
$value1 = explode('=', $value);
foreach ($value1 as $x) {
}
}
如何隔离日期值?
<?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
[编辑] mickmackusa 的答案是将 url 参数解析为变量的正确工具。
您可能要查找的函数是 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',
)
或者没有正则表达式,只是 trim 最后一个 =
并在 =&
上爆炸:(Demo)
$string = '23.08.18=&22.08.18=&21.08.18=';
var_export(explode('=&', rtrim($string, '=')));
// same output as preg_split()