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

  • Автор темы Автор темы kruftin
  • Дата начала Дата начала

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]);
смотришь, понимаешь в чём не прав, либо пытаешься воспроизвести на чистом коде с этими же аргументами. Понимаешь в чём не прав.

Мы тут не нужны.
 
Дак написано то верно. Тут какая-то особенность рнр вылазит.
 
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 " вот че дамп говорит
 
Тут понимаешь косяк какой: все задано верно, но рнр как будто игнорит эту строчку, хотя строчка выше отличается лишь массивом с которым я работаю. Я смотрю что функция выдает через echo. И например если заменить условие if (j == $num_idstr){}, на if (j != $num_idstr){} то все норм. Хотя следует учесть, что условие выполняется и в том и другом случает, т.е. в if мы заходим.
 
Твой алгоритм на столько [censored], что даже не смешон. Его в раздел индусского кода даже не поместить. Немедленно сотри и забудь это как страшный сон. Начни все сначала.
 
Дак несмотря на его ущербность, он должен работать, поскольку написан в соответствии с правилами языка рнр. Напиши как он должен быть в идеале, я полюбуюсь и преклонюсь перед тобой, если он действительно будет шедевром.
 
Распишу почему я так написал по строкам, попробую исправить в лучшую сторону:
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 использовать, но чем он лучше то.
Да я не программист, я антенщик.
 
не работает функция str_replace для строки
Сделай минимальный пример.
Есть такая-то строка (конкретная), делаю в ней такую-то замену (конкретную), и это не сработало. С вероятностью 99.99999% окажется, что ошибка не в функции str_replace

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

Совершенно ни к чему здесь выкладывать километры говнокода
 
Ответь на вопрос, что будет, если в строке окажутся два одинаковых значения: "ааа:ббб:ввв:ааа:ггг"?
Да я не программист, я антенщик.
Ну и че тогда не спрашиваешь на форуме антенщиков? Нас не интересует ни твое уголовное, ни антенное прошлое. Твой алгоритм плох чуть более, чем полностью. Чего стрелки переводить на глюки РНР?
 
Говнокод я выложил, потому что функция str_replace не работает в конкретном месте с конкретными переменными, так просто на чистом листе она само собой работает.
 
Говнокод я выложил, потому что функция str_replace не работает в конкретном месте с конкретными переменными, так просто на чистом листе она само собой работает.
Ну, значит, нет никаких глюков у функции str_replace - глюки вызывает этот самый ..овнокод, логично же :)
Его и нужно проверять/дебажить, выявлять проблемы в алгоритме.
 
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");// а это работает
}
Ну а подсказать вот по этому отрезку кода что тут не так вы можете?
Или здесь все норм?
 
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, ищи в логике ошибку
 
Пробелы оказались во всем виноваты, но их никак не могло быть в строке. $pieces_tab[$j] = chop($pieces_tab[$j]); и все заработало, хотя в $pieces_tab[$j] пробелов нет. Видать надо уходить от блокнота мелкомягких, раз он пробелы даже не отображает.
 
Сверху