为什么 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()