如何使用PHP从字符串中删除某些字符

3

我需要使用PHP从按值搜索的字符串中删除一些字符。我将在下面解释我的代码。

当前数据

$datArr = array(
    array(
        "name" => "Ram",
        "id" => 1,
        "date" => "12/04/2017 05:31:57 AM"
    ),
    array(
        "name" => "Rahim",
        "id" => 5,
        "date" => "12/03/2017 12:31:57 PM"
    ),
    array(
        "name" => "Raj",
        "id" => 4,
        "date" => "12/04/2017 05:31:57 PM"
    )
);

预期输出

$datArr = array(
    array(
        "name" => "Ram",
        "id" => 1,
        "date" => "12/04/2017 05:31:57"
    ),
    array(
        "name" => "Rahim",
        "id" => 5,
        "date" => "12/03/2017 12:31:57"
    ),
    array(
        "name" => "Raj",
        "id" => 4,
        "date" => "12/04/2017 05:31:57"
    )
);

从上面的数组中,有一个date字段值,我需要使用PHP从所有日期中删除AM/PM


2
为什么不在输出时处理它,或者在创建时就不要放进去呢? - Lawrence Cherone
2
尝试使用foreach循环检查键名“date”,并从值中删除不需要的部分。 - DigiLive
我正在这样做 foreach ($datArr as $key => $value) { /*if (preg_match('(AM|PM)', $value['date']) === 1) { $datArr[$key]['date']=str_replace('search', replace, subject); }*/ if (strpos($value['date'], 'AM')===true) { $datArr[$key]['date']=str_replace('AM','',$value['date']); } if (strpos($value['date'], 'PM')===true) { echo 'PM <br>'; $datArr[$key]['date']=str_replace('PM','',$value['date']); } }。但它没有按预期输出。 - user5443928
@subhra,你可以通过将要替换的事物数组传递给str_replace()来用一条语句实现这个目标。查看我的答案获取更多信息。 - RamC
使用字符串函数不危险吗?如果你把它们都去掉了,你怎么区分下午5点和上午5点?如果要去掉AM和PM,难道不应该将其转换为军事时间吗? - Kevin
8个回答

4
使用 rtrim 函数可以删除结尾的字符,如下所示:
$datArr = array_map(function($v){
    $v['date'] = rtrim($v['date'], " APMapm");
    return $v;
}, $datArr);

1
@kris-roofe 很好的解决方案,您能否稍微解释一下 "APMapm" 的工作原理,谢谢。 - RamC
它列出了需要去除的所有字符。您可以参考PHP手册中的rtrim - LF00

0
$datArr=array(array("name"=>"Ram","id"=>1,"date"=>"12/04/2017 05:31:57 AM"),array("name"=>"Rahim","id"=>5,"date"=>"12/03/2017 12:31:57 PM"),array("name"=>"Raj","id"=>4,"date"=>"12/04/2017 05:31:57 PM"));

使用foreach循环遍历数组。 当遇到日期值时,执行以下操作

将日期字符串转换为datetime对象

$time = strtotime($dateKeyValueInArray);

现在为此时间戳设置日期格式

$newformat = date('Y-m-d',$time);

使用以下命令查看输出

echo $newformat;

参考链接如下: 将字符串转换为日期和日期时间 https://www.w3schools.com/php/func_date_date_format.asp

希望对您有所帮助 :)


0

你可以通过 foreach 循环中的 str_replace()函数来实现。

代码

foreach ($datArr as &$dat) {
    $dat['date'] = str_replace([' AM', ' PM'], "", $dat['date']);
}

输入

$datArr = array(
    array(
        "name" => "Ram",
        "id" => 1,
        "date" => "12/04/2017 05:31:57 AM"
    ),
    array(
        "name" => "Rahim",
        "id" => 5,
        "date" => "12/03/2017 12:31:57 PM"
    ),
    array(
        "name" => "Raj",
        "id" => 4,
        "date" => "12/04/2017 05:31:57 PM"
    )
);

输出

$datArr = array(
    array(
        "name" => "Ram",
        "id" => 1,
        "date" => "12/04/2017 05:31:57"
    ),
    array(
        "name" => "Rahim",
        "id" => 5,
        "date" => "12/03/2017 12:31:57"
    ),
    array(
        "name" => "Raj",
        "id" => 4,
        "date" => "12/04/2017 05:31:57"
    )
);

0

尝试使用 foreach 循环进行此操作

$datArr=array(array("name"=>"Ram","id"=>1,"date"=>"12/04/2017 05:31:57 AM"),array("name"=>"Rahim","id"=>5,"date"=>"12/03/2017 12:31:57 PM"),array("name"=>"Raj","id"=>4,"date"=>"12/04/2017 05:31:57 PM"));

print_r($datArr);
foreach($datArr as $key=>$value)
{
    $datArr[$key]['date'] = date('m/d/Y H:i:s',strtotime($value['date']));
}

echo "after";
print_r($datArr);

这段代码的输出结果

    Array
(
    [0] => Array
        (
            [name] => Ram
            [id] => 1
            [date] => 12/04/2017 05:31:57 AM
        )

    [1] => Array
        (
            [name] => Rahim
            [id] => 5
            [date] => 12/03/2017 12:31:57 PM
        )

    [2] => Array
        (
            [name] => Raj
            [id] => 4
            [date] => 12/04/2017 05:31:57 PM
        )

)
afterArray
(
    [0] => Array
        (
            [name] => Ram
            [id] => 1
            [date] => 12/04/2017 05:31:57
        )

    [1] => Array
        (
            [name] => Rahim
            [id] => 5
            [date] => 12/03/2017 12:31:57
        )

    [2] => Array
        (
            [name] => Raj
            [id] => 4
            [date] => 12/04/2017 17:31:57
        )

)

0

试试这个。这是一个简单易懂的例子。substr函数用于从起始位置0length - 2(不包括AM/PM)截取字符串的一部分。

foreach($datArr as $key => $value){
    $datArr[$key]['date'] = substr($value['date'], 0, strlen($value['date'])-2);
}
print_r($datArr); 

编程愉快 :-)


0

你可以通过循环正则表达式来删除不需要的单词。

foreach($datArr as &$i)
{
     $i['date']=preg_replace('[AM|PM]',"",$i['date']);
}
print_r ($datArr);

输出

Array
(
[0] => Array
    (
        [name] => Ram
        [id] => 1
        [date] => 12/04/2017 05:31:57 
    )

[1] => Array
    (
        [name] => Rahim
        [id] => 5
        [date] => 12/03/2017 12:31:57 
    )

[2] => Array
    (
        [name] => Raj
        [id] => 4
        [date] => 12/04/2017 05:31:57 
    )

)

0
<?php
$datArr=array(array("name"=>"Ram","id"=>1,"date"=>"12/04/2017 05:31:57 AM"),array("name"=>"Rahim","id"=>5,"date"=>"12/03/2017 12:31:57 PM"),array("name"=>"Raj","id"=>4,"date"=>"12/04/2017 05:31:57 PM"));
echo "<pre>";
print_r($datArr);

$a = array();
foreach ($datArr as &$str) {
    $str = str_replace('PM', ' ', $str);
    $str = str_replace('AM', ' ', $str);
    $a[]=$str;
}
print_r($a);
?>

检查 fiddle


0

只是为了说出我的看法,如果你只是直接使用字符串函数去除上午/下午,那么你可能会得到错误的日期时间。如果这样做,你将如何区分上午5点和下午5点?现在你会得到错误的数据。

如果你要去掉下午5的PM,那么你需要将其格式化为军事时间(17点)。要做到这一点,你首先需要转换每个时间。你可以使用DateTime来完成:

$datArr = array_map(function($e){
    $dt = new DateTime($e['date']);
    $e['date'] = $dt->format('m/d/Y H:i:s'); // convert me into correct time

    return $e;
}, $datArr);

样本输出


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接