[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с str_replace
Brajt
есть два массива
$mas1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$mas2 = array(6, 25, 20, 25, 50, 25, 30, 40, 10); и переменная $x с числом от 1 до 9. пытаюсь заменить число в $x на число из массива $mas2: $cena = str_replace($mas1, $mas2, $x); Вот тут если в $x было число 1, оно заменяется не на 6 из $mas2, а на 25. Число 2 в $x заменяется не на 25, а на 250. И число 4 в $x заменяется не на 25, а на 250. Остальные заменяются правильно. Из-за чего эта беда получается?



Спустя 20 минут, 34 секунды (22.12.2011 - 20:28) Игорь_Vasinsky написал(а):
ха... интересно....

Array
(
[
0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
Array
(
[
0] => 6
[1] => 25
[2] => 20
[3] => 25
[4] => 50
[5] => 25
[6] => 30
[7] => 40
[8] => 10
)
x=1(6) : 25
x=2(25) : 250
x=3(20) : 20
x=4(25) : 250
x=5(50) : 50
x=6(25) : 25
x=7(30) : 30
x=8(40) : 40
x=9(10) : 10



даже оч интересно.. щас поковыряем...

Спустя 20 секунд (22.12.2011 - 20:28) m4a1fox написал(а):
Может из-за того что в массиве отсчет идет от нуля?

Спустя 1 минута, 40 секунд (22.12.2011 - 20:30) Игорь_Vasinsky написал(а):
а в цикле то какая разница???

 for($x=1; $x<=9; $x++)
{
echo 'x='.$x.'('.$mas2[$x-1].') : '.str_replace($mas1, $mas2, $x).'<br />';
}


так что зачётно всё

echo str_replace(2, 25, 2);

Спустя 7 минут, 58 секунд (22.12.2011 - 20:38) Игорь_Vasinsky написал(а):
strtr() справилась

$mass = array(1=>6, 2=>25, 3=>20, 4=>25, 5=>50, 6=>25, 7=>30, 8=>40, 9=>10);

for($x=1; $x<=9; $x++)
{
echo 'x='.$x.'('.$mass[$x].') : '.strtr($x, $mass).'<br />';
}


x=1(6) : 6
x=2(25) : 25
x=3(20) : 20
x=4(25) : 25
x=5(50) : 50
x=6(25) : 25
x=7(30) : 30
x=8(40) : 40
x=9(10) : 10



Спустя 6 минут, 12 секунд (22.12.2011 - 20:44) Игорь_Vasinsky написал(а):
баг у штатной функции штоли.... blink.gif

Спустя 29 минут, 51 секунда (22.12.2011 - 21:14) Brajt написал(а):
Спасибо!

Спустя 6 минут, 54 секунды (22.12.2011 - 21:21) Игорь_Vasinsky написал(а):
да мне то не ясно чё за фигня происходит blink.gif

Спустя 4 минуты, 40 секунд (22.12.2011 - 21:26) Brajt написал(а):
На другом форуме человек написал: "всё правильно - так и будет работать. пример, у тебя

$x = "1"

в строке ищется 1 - находится и заменяется на 6; затем ищется 2, 3, 4, 5, 6 - оппа, нашли в строке 6... тааак... 6 заменяется на (вдруг!) 25, дальше ищется 7, 8, 9. поиск заканчивается.

$x = "2"

в строке ищется 1, 2 - находится и заменяется на 25, затем ищется 3, 4, 5 - находится и заменяется на 50 (кто бы мог подумать...), ищется 6, 7, 8, 9. поиск заканчивается.


я бы сделал что-то типа такого $cena = $mas2[$x-1]; в данном случае,
либо $cena = $mas2[array_search($x, $mas1)] если массив $mas1 содержит другие значения"

Спустя 2 минуты, 17 секунд (22.12.2011 - 21:28) Игорь_Vasinsky написал(а):
так откуда 0 - его нет во втором массиве

Спустя 2 минуты, 46 секунд (22.12.2011 - 21:31) Brajt написал(а):
Допустим в $x число 2. $cena = str_replace($mas1, $mas2, $x); превращала $x в 25. а потом еще цифра 5 из числа 25 заменялась на 50 из $mas2, вот и получалось 250

Спустя 8 минут, 39 секунд (22.12.2011 - 21:39) killer8080 написал(а):
Цитата
Предостережение
Замечание о порядке замены

Так как str_replace() осуществляет замену слева направо, то при использовании множественных замен она может заменить ранее вставленное значение на другое. Смотрите также примеры на этой странице.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.