Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何替换阵列中的某些内容?_Php_Arrays_Replace - Fatal编程技术网

Php 如何替换阵列中的某些内容?

Php 如何替换阵列中的某些内容?,php,arrays,replace,Php,Arrays,Replace,我需要格式化数组中的日期-但是数组中的日期不会保存为数据库中的datetime,或者类似的东西。。我从我的服务器上得到了日期,并将其删除 因此,我需要使用preg\u replace或str\u replace 到目前为止,我使用str\u replace尝试的是: $reverse_date = str_replace( '[', '' ,$reverse_date); $reverse_date = str_replace( ']', '' ,$reverse_date);

我需要格式化数组中的日期-但是数组中的日期不会保存为数据库中的
datetime
,或者类似的东西。。我从我的服务器上得到了日期,并将其删除

因此,我需要使用
preg\u replace
str\u replace

到目前为止,我使用
str\u replace
尝试的是:

    $reverse_date = str_replace( '[', '' ,$reverse_date);
    $reverse_date = str_replace( ']', '' ,$reverse_date);
    $reverse_date = str_replace( '/', '.' ,$reverse_date); 
但我不想用三行来表示这个

如果我打印这个,我会得到:
12.Oct.2015:01:10:43+0200

在它看起来像这样之前:
[12/Oct/2015:00:37:29+0200]

所以这没关系!但是我仍然不想使用三行代码,但是我不理解
preg\u replace
语法

我想要以下输出:

12.Oct.2015(space)01:10:43 +0200

使用
date\u parse
分解日期并组合各部分以形成所需结果:

[40] boris> $date_array = date_parse(" [12/Oct/2015:00:37:29 +0200] ");
// array(
//   'year' => 2015,
//   'month' => 10,
//   'day' => 12,
//   'hour' => 0,
//   'minute' => 37,
//   'second' => 29,
//   'fraction' => 0,
//   'warning_count' => 0,
//   'warnings' => array(
// 
//   ),
//   'error_count' => 2,
//   'errors' => array(
//     0 => 'Unexpected character',
//     27 => 'Unexpected character'
//   ),
//   'is_localtime' => true,
//   'zone_type' => 1,
//   'zone' => -120,
//   'is_dst' => false
// )

您没有将月份作为缩写字符串,但通过关联数组(
array(1=>'Jan',…,12=>'Dec')
)添加月份是很简单的,您可以放心地处理日期解析内容和将来需要的更改

正如您所说,您从以下格式的数组中获取日期

[12/Oct/2015:00:37:29 +0200]
因此,您不必使用
str\u replace
preg\u replace
而只需使用PHP的
DateTime::createFromFormat
函数

$date = DateTime::createFromFormat("[d/M/Y:H:i:s P]","[12/Oct/2015:00:37:29 +0200]");
echo $date->format('d.M.Y H:i:s P');//12.Oct.2015 00:37:29 +02:00

好的,我在一行中找到了如何使用preg_replace,但是我更喜欢带有日期格式的Uchiha答案-即使他没有使用正则表达式,这可能是最好的方法

echo preg_replace(['~(?<=\d{4}:\d{2}):~', '~[\[]~', '~[\]]~', '~[\/]~g'],[' ', '', '', '.'],'[12/Oct/2015:00:37:29 +0200]');

echo preg\u replace(['~(?是字符串还是数组是数组!但我只需要数组的第一个数据,$reverse\u date[1]发布你的数组结构我的数组有两个日期:“[12\/Oct\/2015:01:09:51+0200]”,“[12\/Oct\/2015:01:08:50+0200]””,请改为检查我的答案..我收到以下错误消息:该类找不到类“App\Http\Controllers\DateTime:$date=DateTime::createFromFormat(“[d/m/Y:H:I:sp]”,“$reverse\u date[1]”;echo$date->format('d.m.Y H:I:sp'));您使用的是LaravelYou吗?如果您在命名空间中,请使用
\DateTime::create…
它不会将第一个冒号替换为带空格的空格冒号?其中“我想要以下输出:12.Oct.2015(space)01:10:43+0200”-问题的最后两行哦,好的,我明白您的意思了,看看这一行-修复