X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> str_repace трабл
SilverCross
SilverCross
Topic Starter сообщение 9.8.2012, 20:54; Ответить: SilverCross
Сообщение #1


Возникли проблемы с функцией str_replace

Есть строка

[PHP]
$string = "Gm Cm Gm Cm";
[/PHP]

Так же есть массив из элементов, на которые мы ищем в строке $string

[PHP]
$array_words[]="Gm";
$array_words[]="Cm";
$array_words[]="G";
$array_words[]="C";
[/PHP]

Дальше мы заменяем строку таким образом

[PHP]
foreach ($array_words as $key =>$value) {
$string_replace = str_replace ($value, "<a href=''>".$value."</a>", $string);
}
[/PHP]

Попытаюсь доступно объяснить суть проблемы...

Нужно чтобы строка выглядела следующим образом

<a href=''>Gm</a> <a href=''>Cm</a> <a href=''>Gm</a> <a href=''>Cm</a>"


а выглядит она на самом деле так...

<a href=''>G</a>m <a href=''>C</a>m <a href=''>G</a>m <a href=''>C</a>m"


Как решить эту проблему?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 9.8.2012, 21:19; Ответить: r3ntg3n
Сообщение #2


(SilverCross @ 9.8.2012, 23:54) *
Как решить эту проблему?

Убрать из массива array_words 2 последних элемента. У вас эти 2 элемента являются подстроками первых двух, вот поэтому вы и получаете тарабарщину при выводе.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SilverCross
SilverCross
Topic Starter сообщение 9.8.2012, 21:32; Ответить: SilverCross
Сообщение #3


Дело в том, что они нужны там, просто так я бы их туда не лепил
Вот в чем и вопрос
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
A1ex_hb
A1ex_hb
сообщение 9.8.2012, 21:35; Ответить: A1ex_hb
Сообщение #4


SilverCross,

можно так
[PHP]
<?
$string = "Gm Cm Gm Cm";
echo str_replace(array(
'G','C','m'
),array(
'<a href="#">G','<a href="#">C','m</a>'
),$string);
?>
[/PHP]

или так:
[PHP]<?
$string = "Gm Cm Gm Cm";
echo str_replace(array(
'Gm','Cm'
),array(
'<a href="#">Gm</a>','<a href="#">Cm</a>'
),$string);
?>[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SilverCross
SilverCross
Topic Starter сообщение 9.8.2012, 21:43; Ответить: SilverCross
Сообщение #5


Теперь брошу код, которым пользуюсь, т.к. код не подходит

[PHP]$sql = mysql_query ("SELECT * FROM songs");
$row = mysql_fetch_assoc($sql);

$g = $row['text_song']; //Текст песни, в котором нужно заменять строки

$sql = mysql_query ("SELECT * FROM chords"); //Аккорды

while ($chord = mysql_fetch_array($sql)) {

$p = str_replace($chord['chord'], "<a href=''>".$chord['chord']."</a>", $g);
$g = $p; //Если убрать, будет заменять 1ю найденную строку каждый раз


}

echo "<pre>".$p."</pre>";
[/PHP]

Как адаптировать код так, чтобы осуществлялась замена правильно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
A1ex_hb
A1ex_hb
сообщение 9.8.2012, 21:48; Ответить: A1ex_hb
Сообщение #6


SilverCross,
переменная $g в строке 4 будет иметь стоку с текстом песни, а в цикле while переменная $chord будет массивом типа array("Gm","Cm","Gm"). Верно?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
A1ex_hb
A1ex_hb
сообщение 9.8.2012, 21:58; Ответить: A1ex_hb
Сообщение #7


А если пойти по такому пути. Между аккордами (до или после) стоит пробел, и если учитывать наличие пробела?

протести код
[PHP]$sql = mysql_query ("SELECT * FROM songs");
$row = mysql_fetch_assoc($sql);

$g = $row['text_song']; //Текст песни, в котором нужно заменять строки

$sql = mysql_query ("SELECT * FROM chords"); //Аккорды

while ($chord = mysql_fetch_array($sql)) {

$g = str_replace($chord['chord'].' ', "<a href=''>".$chord['chord']."</a> ", $g); //Пробел после
$g = str_replace(' '.$chord['chord'], " <a href=''>".$chord['chord']."</a>", $g); //Пробел до



}

echo "<pre>".$g."</pre>";[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SilverCross
SilverCross
Topic Starter сообщение 9.8.2012, 22:07; Ответить: SilverCross
Сообщение #8


(A1ex_hb @ 10.8.2012, 00:58) *
А если пойти по такому пути. Между аккордами (до или после) стоит пробел, и если учитывать наличие пробела?

протести код
[PHP]$sql = mysql_query ("SELECT * FROM songs");
$row = mysql_fetch_assoc($sql);

$g = $row['text_song']; //Текст песни, в котором нужно заменять строки

$sql = mysql_query ("SELECT * FROM chords"); //Аккорды

while ($chord = mysql_fetch_array($sql)) {

$g = str_replace($chord['chord'].' ', "<a href=''>".$chord['chord']."</a> ", $g); //Пробел после
$g = str_replace(' '.$chord['chord'], " <a href=''>".$chord['chord']."</a>", $g); //Пробел до



}

echo "<pre>".$g."</pre>";[/PHP]


не работает:(
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SilverCross
SilverCross
Topic Starter сообщение 9.8.2012, 22:09; Ответить: SilverCross
Сообщение #9


(A1ex_hb @ 10.8.2012, 00:48) *
SilverCross,
переменная $g в строке 4 будет иметь стоку с текстом песни, а в цикле while переменная $chord будет массивом типа array("Gm","Cm","Gm"). Верно?


с каждым выполнением цыкла выводится новый аккорд

но вообще так, вы правы
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
A1ex_hb
A1ex_hb
сообщение 9.8.2012, 22:16; Ответить: A1ex_hb
Сообщение #10


(SilverCross @ 10.8.2012, 01:07) *
не работает:(

что именно не работает? какой результат выводит?

(SilverCross @ 10.8.2012, 01:09) *
с каждым выполнением цыкла выводится новый аккорд

но вообще так, вы правы

а можете кинуть готовое значение для этих переменных?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 19.4.2024, 5:09
Дизайн