【问题标题】:str_replace in array, and append text at the endstr_replace 在数组中,并在末尾附加文本
【发布时间】:2013-07-26 05:57:36
【问题描述】:

所以我有点坚持这一点 - 我正在寻找替换数组中的文本(通过 str_replace 轻松完成),但我也想将文本附加到该特定数组的末尾。比如我原来的数组是:

数组 (

[1] => DTSTART;VALUE=DATE:20130712
[2] => DTEND;VALUE=DATE:20130713
[3] => SUMMARY:Vern
[4] => UID:1fb5aa60-ff89-429e-80fd-ad157dc777b8
[5] => LAST-MODIFIED:20130711T010042Z
[6] => SEQUENCE:1374767972

)

我想在该数组中搜索“;VALUE=DATE”并将其替换为空(“”),但还想在每次替换后插入一个文本字符串 7 个字符(“T000000”)。所以我得到的数组是:

数组 (

[1] => DTSTART:20130712T000000
[2] => DTEND:20130713T000000
[3] => SUMMARY:Vern
[4] => UID:1fb5aa60-ff89-429e-80fd-ad157dc777b8
[5] => LAST-MODIFIED:20130711T010042Z
[6] => SEQUENCE:1374767972

)

使用 str_replace、substr_replace 等的组合可以实现这样的事情吗?我对 PHP 还很陌生,如果有人能指出我正确的方向,我会很高兴!非常感谢

【问题讨论】:

  • 是的,我将 iCal 事件引入我的站点,并且任何不采用“日期-时间”格式的“全天”事件都会触发它。例如,这些事件以全天“日期”值的形式出现,所以我只需要将它们转换为日期时间,它就更容易工作了。这是一种肮脏的做法,但我只需要一个快速的解决方案,可以稍后再回来进一步排除故障。

标签: php arrays


【解决方案1】:

您可以使用preg_replace 作为此类操作的一站式商店:

$array = preg_replace('/(.*);VALUE=DATE(.*)/', '$1$2T000000', $array);

正则表达式匹配任何包含;VALUE=DATE 的字符串,并将其前面和后面的内容捕获到捕获组中(在替换模式中称为$1 和$2)。然后它用连接到 $2 的 $1 替换该字符串(实际上删除了搜索目标)并将"T000000" 附加到结果中。

【讨论】:

  • @EJK - 如果它对你有用,请点击他答案左侧的复选标记以接受它。
  • 对不起,这是我第一次使用这个网站。但我必须说,这是我之前从社区网站获得的最快和最好的响应 - 感谢您的帮助!
【解决方案2】:

天真的方法是遍历每个元素并检查;VALUE=DATE。如果存在,请将其删除并附加 T000000

foreach ($array as $key => $value) {
  if (strpos($value, ';VALUE=DATE') !== false) {
    $array[$key] = str_replace(";VALUE=DATE", "", $value) . "T000000";
  }
}

【讨论】:

  • 它将“T000000”连接到数组中的每个位置,并且每次替换后都不会...
  • 哦,对不起,我把你的答案和灰狼的答案搞混了。
  • 大声笑。我花了很多时间写我的答案,当我发布它时,有几个类似的答案。问候!
【解决方案3】:

您是正确的str_replace() 是您正在寻找的功能。此外,您可以使用连接运算符. 将您的字符串附加到新字符串的末尾。这是你要找的吗?

$array[1] = str_replace(";VALUE=DATE", "", $array[1])."T000000";
$array[2] = str_replace(";VALUE=DATE", "", $array[2])."T000000";

【讨论】:

  • - 这将追加,即使它不替换。
【解决方案4】:
for($i=0;$i<count($array);$i++){
   if(strpos($array[$i], ";VALUE=DATE")){//look for the text into the string
      //Text found, let's replace and append
      $array[$i]=str_replace(";VALUE=DATE","",$array[$i]);
      $array[$i].="T000000";
   }
   else{
      //text not found in that position, will not replace
      //Do something
   }
}

如果你只想替换,那就去做吧

$array=str_replace($array,";VALUE=DATE","");

并将替换所有数组位置中的所有文本...

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 2014-03-22
    • 2015-05-13
    • 1970-01-01
    • 2021-01-27
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多