Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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_String_Replace_Whitespace_Space - Fatal编程技术网

PHP:仅在非空白字符之间替换双空格

PHP:仅在非空白字符之间替换双空格,php,string,replace,whitespace,space,Php,String,Replace,Whitespace,Space,我有一个此格式的日期(从特定脚本中提取),我想删除该日期上的所有空格: $date="Date: Tue Aug 2 10:43" 很简单,但诀窍是:在此之前,我想在“2”(或本月的任何其他第9天)之前添加一个“0”,但“0”必须替换“Aug”和“2”之间的第二个空格。 实现这一目标的最佳方法是什么? 请记住,日期(显然)每天都会变化,因此我们不能简单地做这样的事情: $date=str_replace("Aug 2","Aug 02",$date); 相反,我认为最好的

我有一个此格式的日期(从特定脚本中提取),我想删除该日期上的所有空格:

$date="Date:         Tue Aug  2 10:43"
很简单,但诀窍是:在此之前,我想在“2”(或本月的任何其他第9天)之前添加一个“0”,但“0”必须替换“Aug”和“2”之间的第二个空格。 实现这一目标的最佳方法是什么?

请记住,日期(显然)每天都会变化,因此我们不能简单地做这样的事情:

$date=str_replace("Aug  2","Aug 02",$date);
相反,我认为最好的办法是做如下事情:

$date=str_replace("[x]  [x]","[x] 0[x]",$date);

[x] 意思是:“任何非空白字符”(请原谅这种近似值!)

我看到了两种可能性:

  • 使用正则表达式
  • 使用DateTime::createFromFormat,然后使用DateTime::format()
使用
date()
strotime()
执行此任务

$date = strtotime('Tue    Aug     2 10:43'); //white spaces won't effect
echo date('D M 0\2 h:i',$date); 
// output the date just replace the 2 with your 9th of month letter 

嗯,也许有解决办法

$date=preg_replace("/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)  (\d)(\s+)/","$1 0$2$3",$date);

查看输入数据,您的特定脚本似乎生成了一个格式化的输出,这意味着它使用空格填充。这意味着字符串的长度可能总是相同的,而与其中的实际日期和时间无关。如果这是真的,那么您可以使用一个非常简单的代码:

if($date{22} == ' ') $date{22} = '0'; // replace space with zero
$date = preg_replace('/  +/', ' ', $date); // convert multiple spaces into single space
但是,如果您的特定脚本没有生成格式化的otput,则必须使用一些稍有不同但非常简单的方法:

$date = preg_replace('/  +/', ' ', $date); // convert multiple spaces into single space
$arr = explode(' ', $date); // split text into words by spaces
if($arr[3] < 10) $arr[3] = '0'.$arr[3];
$date = implode(' ', $arr); // combine words
$date=preg_replace(“/+/”,“,$date);//将多个空间转换为单个空间
$arr=爆炸(“”,$date);//按空格将文本拆分为单词
如果($arr[3]<10)$arr[3]=“0”。$arr[3];
$date=内爆(“”,$arr);//组合词

也许不是“最好”的解决方案,但实际上是在我的代码中实现的最简单的解决方案。像预期的那样工作。非常感谢!我使用了Lakremon解决方案,但无论如何感谢您的评论和您的时间,希望它能在将来有所帮助。它一定是所有解决方案中“最好的”解决方案,但是,在这个特定情况下,Akremon解决方案非常适合我,因为它是我最容易实现的。无论如何,非常感谢你的帮助!