2013-07-25 2 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 = ДАТА" и заменить его ничего ("") , но также хотелось бы вставить текстовую строку из 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

сво ческое событие? –

+0

Да, я привожу события iCal на свой сайт, и любые события «весь день», не входящие в формат «дата-время», вытаскивают его. Например, эти события входят в качестве значений «даты» в течение всего дня, поэтому мне просто нужно преобразовать их в дату-время, и это работает намного проще. Это грязный способ сделать это, но мне просто нужно быстрое решение, и вы можете вернуться позже и немного поработать. – EJK

ответ

4

Вы можете использовать preg_replace как один универсальный магазин для этого типа манипуляции:

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

регулярное выражение соответствует любой строке, которая содержит ;VALUE=DATE и захватывает независимо предшествует и следует за ним в захвате групп (обозначенные как $ 1 и $ 2 в шаблоне замены). Затем он заменяет эту строку на $ 1, объединенную до $ 2 (эффективно удаляя цель поиска) и добавляет "T000000" к результату.

+1

+ для одной остановки. –

+0

Perfect - это работает точно так, как ожидалось! Благодаря!! – 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()' check. –

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

И заменит весь текст во всех позициях массива ...

Смежные вопросы