Глюки рнр функция str_replace()

kruftin

Новичок
В таком вот коде при заходе во второй if {} не работает функция str_replace для строки
PHP:
$pre_result2[$k] = str_replace($pieces_tab[$j],$pieces_tab[$j]."\\\\ \hline",$pre_result2[$k]);
Тогда как для строки $pre_result[$k] = str_replace($pieces_tab[$j],"<td>".$pieces_tab[$j]."</td></tr>",$pre_result[$k]); она работает как надо, не подскажете в чем тут дело?
PHP:
$num_idstr = substr_count($pre_result[$k], ":");
						$pieces_tab = explode(":", $pre_result[$k]); //Столбцы разделяем через :	
						if($num_idstr > 0)
						{
						for($j=0;$j < ($num_idstr + 1);$j++)
						{
							if($j == 0)
							{
								$pre_result[$k] = str_replace($pieces_tab[$j].":","<tr><td>".$pieces_tab[$j]."</td>",$pre_result[$k]);
								$pre_result2[$k] = str_replace($pieces_tab[$j].":","\n\r".$pieces_tab[$j],$pre_result2[$k]);
							}
							else
							{
								if($j == $num_idstr)
								{
									$pre_result[$k] = str_replace($pieces_tab[$j],"<td>".$pieces_tab[$j]."</td></tr>",$pre_result[$k]);
									$pre_result2[$k] = str_replace($pieces_tab[$j],$pieces_tab[$j]."\\\\ \hline",$pre_result2[$k]);
									
									echo $pre_result2[$k];
									
								}
								else
								{
									$pre_result[$k] = str_replace($pieces_tab[$j].":","<td>".$pieces_tab[$j]."</td>",$pre_result[$k]);
									$pre_result2[$k] = str_replace($pieces_tab[$j].":"," & ".$pieces_tab[$j]." & ",$pre_result2[$k]);
								}
							}
						}
						}
 

Вурдалак

Продвинутый новичок
Дампишь аргументы функции:
PHP:
var_dump($pieces_tab[$j],$pieces_tab[$j]."\\\\ \hline",$pre_result2[$k]);
смотришь, понимаешь в чём не прав, либо пытаешься воспроизвести на чистом коде с этими же аргументами. Понимаешь в чём не прав.

Мы тут не нужны.
 

kruftin

Новичок
Дак написано то верно. Тут какая-то особенность рнр вылазит.
 

kruftin

Новичок
string(10) "описание " string(19) "описание \\ \hline" string(34) " аргумент & диапазон & описание " string(13) "Блок памяти " string(22) "Блок памяти \\ \hline" string(36) " param1 & 1000-2000 & Блок памяти " string(10) "Блок 2 " string(19) "Блок 2 \\ \hline" string(35) " param2 & 12000-FF000 & Блок 2 " вот че дамп говорит
 

kruftin

Новичок
Тут понимаешь косяк какой: все задано верно, но рнр как будто игнорит эту строчку, хотя строчка выше отличается лишь массивом с которым я работаю. Я смотрю что функция выдает через echo. И например если заменить условие if (j == $num_idstr){}, на if (j != $num_idstr){} то все норм. Хотя следует учесть, что условие выполняется и в том и другом случает, т.е. в if мы заходим.
 

С.

Продвинутый новичок
Твой алгоритм на столько [censored], что даже не смешон. Его в раздел индусского кода даже не поместить. Немедленно сотри и забудь это как страшный сон. Начни все сначала.
 

kruftin

Новичок
Дак несмотря на его ущербность, он должен работать, поскольку написан в соответствии с правилами языка рнр. Напиши как он должен быть в идеале, я полюбуюсь и преклонюсь перед тобой, если он действительно будет шедевром.
 

kruftin

Новичок
Распишу почему я так написал по строкам, попробую исправить в лучшую сторону:
PHP:
                        $num_idstr = substr_count($pre_result[$k], ":");//Подсчитываем количество символов ":"
                        $pieces_tab = explode(":", $pre_result[$k]); //Столбцы разделяем через ":"    
                        if($num_idstr > 0)//Проверяем есть ли вообще символ ":", т.е. наш разделитель
                        {
                        for($j=0;$j < ($num_idstr + 1);$j++)//Перебираем все вхождения текста в строке 
                        {
                            // Далее формируем табличку в формате html из текстового файла
                            if($j == 0)//Для начала строки добавляем теги
                            {
                                $pre_result[$k] = str_replace($pieces_tab[$j].":","<tr><td>".$pieces_tab[$j]."</td>",$pre_result[$k]);
                                $pre_result2[$k] = str_replace($pieces_tab[$j].":","\n\r".$pieces_tab[$j],$pre_result2[$k]);
                            }
                            else
                                {
                                if($j == $num_idstr)//Добавляем теги для конца строки
                                {
                                    $pre_result[$k] = str_replace($pieces_tab[$j],"<td>".$pieces_tab[$j]."</td></tr>",$pre_result[$k]);
                                    $pre_result2[$k] = str_replace($pieces_tab[$j],$pieces_tab[$j]."\\\\ \hline",$pre_result2[$k]);
                                    
                                    echo $pre_result2[$k];
                                    
                                }
                                else//Добавляем теги внутрь таблицы
                                {
                                    $pre_result[$k] = str_replace($pieces_tab[$j].":","<td>".$pieces_tab[$j]."</td>",$pre_result[$k]);
                                    $pre_result2[$k] = str_replace($pieces_tab[$j].":"," & ".$pieces_tab[$j]." & ",$pre_result2[$k]);
                                }
                            }
                        }
                        }
Ну я не знаю че тут не так и исправлять надо. Можно конечно case использовать, но чем он лучше то.
Да я не программист, я антенщик.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
не работает функция str_replace для строки
Сделай минимальный пример.
Есть такая-то строка (конкретная), делаю в ней такую-то замену (конкретную), и это не сработало. С вероятностью 99.99999% окажется, что ошибка не в функции str_replace

Например, твой коммент мог бы выглядеть так:
PHP:
echo str_replace("blabla", "bloblo", "asdfas blabla sdfasd"); //str_replace не работает !
Совершенно ни к чему здесь выкладывать километры говнокода
 

С.

Продвинутый новичок
Ответь на вопрос, что будет, если в строке окажутся два одинаковых значения: "ааа:ббб:ввв:ааа:ггг"?
Да я не программист, я антенщик.
Ну и че тогда не спрашиваешь на форуме антенщиков? Нас не интересует ни твое уголовное, ни антенное прошлое. Твой алгоритм плох чуть более, чем полностью. Чего стрелки переводить на глюки РНР?
 

kruftin

Новичок
Говнокод я выложил, потому что функция str_replace не работает в конкретном месте с конкретными переменными, так просто на чистом листе она само собой работает.
 

Andkorol

Новичок
Говнокод я выложил, потому что функция str_replace не работает в конкретном месте с конкретными переменными, так просто на чистом листе она само собой работает.
Ну, значит, нет никаких глюков у функции str_replace - глюки вызывает этот самый ..овнокод, логично же :)
Его и нужно проверять/дебажить, выявлять проблемы в алгоритме.
 

kruftin

Новичок
else
{

echo $pieces_tab[$j]; //получил значение 112
echo $pre_result2[$k];//получил значение 112 & 235 & 789
echo str_replace($pieces_tab[$j],$pieces_tab[$j]."123",$pre_result2[$k]); //это не работает
echo str_replace("bbb","bbb \hline","bbb:ccc:ddd");// а это работает
}
Ну а подсказать вот по этому отрезку кода что тут не так вы можете?
Или здесь все норм?
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
PHP:
<?php
$j = 1;
$k = 2;
$pieces_tab = array($j => '112');
$pre_result2 = array($k => '112 & 235 & 789');


echo $pieces_tab[$j], "\n"; //получил значение 112
echo $pre_result2[$k], "\n";//получил значение 112 & 235 & 789
echo str_replace($pieces_tab[$j], $pieces_tab[$j]."123", $pre_result2[$k]), "\n"; //112123 & 235 & 789

?>
Сам не можешь что ли проверить??

Ошибка в другом месте, отстань ты от этой str_replace, ищи в логике ошибку
 

kruftin

Новичок
Пробелы оказались во всем виноваты, но их никак не могло быть в строке. $pieces_tab[$j] = chop($pieces_tab[$j]); и все заработало, хотя в $pieces_tab[$j] пробелов нет. Видать надо уходить от блокнота мелкомягких, раз он пробелы даже не отображает.
 
Сверху