【问题标题】:Why isn't php explode extracting array values为什么 php 不爆炸提取数组值
【发布时间】:2019-01-16 09:20:22
【问题描述】:

我有一些日期值(每个都有一个尾随 = 符号)存储为&-delimited 字符串。

我的$_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) {
    }
}

如何隔离日期值?

【问题讨论】:

标签: php arrays query-string explode array-key


【解决方案1】:

您可能正在寻找的函数是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()

【讨论】:

  • @objelland 如果您能重新比较此页面上的答案,我将不胜感激。
【解决方案2】:
<?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 参数解析为变量的正确工具。

【讨论】:

  • 你的建议解决了我的问题,好东西!运行 multiexplode 函数后,我只是添加了一个 foreach 循环来提取数组的内容。
  • @objelland 不会多次爆炸。这个答案是一个低效的 hack,可以完全用两个本机函数调用代替。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2017-02-18
  • 2015-08-28
  • 2012-08-03
  • 1970-01-01
相关资源
最近更新 更多