Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: eval в цикле
 
 автор: Владимир55   (07.10.2009 в 23:16)   письмо автору
 
 

Есть некий код, записанный в виде строки и хранящийся в переменной $kod_2

На дисплей этот код выводится в таком виде

<?php
echo  $kod_2 ;
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';



Этот код используется в цикле с оператором eval и получается вот что:

<?php 
for($ii[0] = 0$ii[0] < 4$ii[0]++)
for(
$ii[1] = 0$ii[1] < 4$ii[1]++)
for(
$ii[2] = 0$ii[2] < 3$ii[2]++)
for(
$ii[3] = 0$ii[3] < 3$ii[3]++)
for(
$ii[4] = 0$ii[4] < 4$ii[4]++)
{
    eval(
$kod_2);
    echo 
"<br>"$kod_2;

}


В итоге я получаю на дисплее список в виде
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';
' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';


Перепробовал всякое, но отладить исполнение этого кода не удается...

  Ответить  
 
 автор: Trianon   (07.10.2009 в 23:37)   письмо автору
 
   для: Владимир55   (07.10.2009 в 23:16)
 

    eval("\$x=$kod_2;");
    echo "<br>", $x;

  Ответить  
 
 автор: Владимир55   (07.10.2009 в 23:48)   письмо автору
 
   для: Trianon   (07.10.2009 в 23:37)
 

Выводит тоже самое, только без кавычек и точки с запятой в конце:

$content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] 

  Ответить  
 
 автор: Trianon   (07.10.2009 в 23:53)   письмо автору
 
   для: Владимир55   (07.10.2009 в 23:48)
 

не верю.
Вообще-то я проверил перед тем, как постить ответ.
Массив $content пришлось создать за свой счет.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:10)   письмо автору
 
   для: Trianon   (07.10.2009 в 23:53)
 

Дык чего же делать-то?

Я могу скриншот прислать, заверенный у нотариуса (шутка).

Может, какая еще причина? Как поискать её?

Работаю на Денвере, версия рнр 4 (наверное).

  Ответить  
 
 автор: Trianon   (08.10.2009 в 00:13)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:10)
 

<?php
for($a 0$a 5$a++) for($b 0$b 5$b++) $content[$a][$b] = chr(ord('A')+$a*5+$b);
$kod_2 ' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';

for(
$ii[0] = 0$ii[0] < 4$ii[0]++)
for(
$ii[1] = 0$ii[1] < 4$ii[1]++)
for(
$ii[2] = 0$ii[2] < 3$ii[2]++)
for(
$ii[3] = 0$ii[3] < 3$ii[3]++)
for(
$ii[4] = 0$ii[4] < 4$ii[4]++)
{
    eval(
"\$x=$kod_2;");
    echo 
"<br>"$x;

}
?>


Присылайте. Можно без заверения. аттачем.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:19)   письмо автору
 
   для: Trianon   (08.10.2009 в 00:13)
 

Это работает!
Как же найти ошибку?!!

  Ответить  
 
 автор: cheops   (08.10.2009 в 00:21)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:19)
 

Вообще лучше отказать от использования eval() вообще - сложность поиска ошибок в коде усложняется с ним в разы. А задачу которую вы выполняете можно осуществить без него.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:22)   письмо автору
 
   для: cheops   (08.10.2009 в 00:21)
 

Типа eval заменить на $$ ?

  Ответить  
 
 автор: Trianon   (08.10.2009 в 00:23)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:22)
 

нет... вернуть логику алгоритма из секции данных в секцию программного кода.

  Ответить  
 
 автор: cheops   (08.10.2009 в 00:26)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:22)
 

А почему следующий код не подходит?
<?php 
for($a 0$a 5$a++) for($b 0$b 5$b++) $content[$a][$b] = chr(ord('A')+$a*5+$b); 

for(
$ii[0] = 0$ii[0] < 4$ii[0]++) 
for(
$ii[1] = 0$ii[1] < 4$ii[1]++) 
for(
$ii[2] = 0$ii[2] < 3$ii[2]++) 
for(
$ii[3] = 0$ii[3] < 3$ii[3]++) 
for(
$ii[4] = 0$ii[4] < 4$ii[4]++) 

  echo  
$content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ; 

?>

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:51)   письмо автору
 
   для: cheops   (08.10.2009 в 00:26)
 

Конечно же, он подходит.

Ньанс в том, что это частный случай. А вообще код формируется скриптом в зависимрсти от задания.

  Ответить  
 
 автор: Trianon   (08.10.2009 в 00:22)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:19)
 

процитируйте строго, что выводит у Вас оператор echo $kod_2 ;

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:25)   письмо автору
 
   для: Trianon   (08.10.2009 в 00:22)
 

Вот это:

' $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ';

  Ответить  
 
 автор: cheops   (08.10.2009 в 00:27)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:25)
 

Одиночные кавычки и точку с запятой тоже?

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:28)   письмо автору
 
   для: cheops   (08.10.2009 в 00:27)
 

Да, то же.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:29)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:28)
 

Если я в цикле (без eval) пишу
echo "<br>", $content[0][$ii[0]] . $content[1][$ii[1]] . $content[2][$ii[2]] . $content[3][$ii[3]] . $content[4][$ii[4]] ;

то получаю
Пришла пора чтоб истинный мудрец
Пришла пора чтоб истинныймудрый человек
Пришла пора чтоб истинныйфилософ
Пришла пора чтоб истинныймыслитель
Пришла пора чтобдействительный мудрец
Пришла пора чтобдействительныймудрый человек


То есть, массив функционирует нормально...

  Ответить  
 
 автор: cheops   (08.10.2009 в 00:31)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:28)
 

Тогда никакого результат не должно быть - в одиночных кавычках переменные не интерполируются, а выводятся как есть. Нужно избавиться от одиночных кавычек.

  Ответить  
 
 автор: Trianon   (08.10.2009 в 00:35)   письмо автору
 
   для: Владимир55   (08.10.2009 в 00:25)
 

Это не является оператором языка.
Тогда разве так:
    eval('$x='.trim($kod_2, "'").';');
    echo "<br>", $x;

Через двойной eval тоже можно, если ставить целью уровень изврата загнать под потолок.

  Ответить  
 
 автор: Владимир55   (08.10.2009 в 00:40)   письмо автору
 
   для: Trianon   (08.10.2009 в 00:35)
 

"уровень изврата загнать под потолок"
Это прямо в точку! Это про меня! Что есть, то есть!

Одинарные кавычки я добавлял специально, найдя в сети какой-то пример, ибо в каконической форме оператор не пошел.

Это добавление убрал, кавычки исчезли вообще (нет ни одинарных, ни двойных), и всё заработало!

Большое спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования