2013-07-25 57 views
1

所以我有点卡住了 - 我正在寻找替换数组中的文本(很容易通过str_replace完成),但我也想将文本追加到该特定数组的末尾。例如,我原来的数组是: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相当陌生,如果有人能指引我朝着正确的方向,我会很乐意!非常感谢

+0

它的iCal事件? – 2013-07-25 21:49:54

+0

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

回答

4

您可以使用preg_replace作为这种类型的操作的一站式服务:

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

正则表达式包含;VALUE=DATE和捕捉任何之前又在成捕获组(任意字符串匹配在替换模式中称为1美元和2美元)。然后它将$ 1连接到$ 2的字符串替换(有效地移除搜索目标)并将"T000000"附加到结果。

+1

+一站式服务。 –

+0

完美 - 这完全符合预期!谢谢!! – EJK

+0

@EJK - 如果它适合您,请点击答案左边的复选标记以接受它。 –

0

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

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

- 即使不替换,也会附加。 –

1

幼稚的做法是遍历每个元素并检查;VALUE=DATE。如果存在,请将其删除并追加T000000

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

它会将“T000000”连接到阵列中的每个位置,并且在每次替换之后都不连续... –

+1

它可以正常工作。注意'strpos()'检查。 –

+0

哦,斯瑞,我把你的答案和坏狼的答案混淆了。 –

0
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",""); 

,将取代在阵列的所有位置的所有文字...