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

Форум PHP

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

 

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

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

тема: В цикле вывести саму переменную не ее значение
 
 автор: tima2010   (11.08.2011 в 20:36)   письмо автору
 
 

Привет, есть небольшой скрипт, для его выполнения в файле пишу 20 строк кода которые отличаются только числами (просто у каждой переменной свое значение), чтобы выглядело все компактнее решил сделать цикл такого вида:
<?php

for ( $i=1$i<=20$i++) {
echo 
"<?php $color".$i.";  ?> \n";


?>


Но вот беда, смотрю в код страницы и вижу что мои переменные выолнились но значение $i осталось, весь код как будто закомментирован:

<?php 1;  ?> 
<?php 2;  ?> 
<?php 3;  ?> 
<?php 4;  ?> 
<?php 5;  ?> 
...


можно ли как то вывести php код через echo ? но с условием что после вывода он выполнится по назначению...

  Ответить  
 
 автор: cheops   (11.08.2011 в 20:50)   письмо автору
 
   для: tima2010   (11.08.2011 в 20:36)
 

Вы не сможете повторно интерпретировать PHP-код - он прогоняется только один раз. Нужно либо сразу формировать нужную вам функциональность, либо использовать eval(), либо переменные с двойным $$, либо использовать include. В общем вариантов довольно много. Что у вас находится в $color, какой функциональности хотите добиться?

  Ответить  
 
 автор: tima2010   (11.08.2011 в 20:54)   письмо автору
 
   для: cheops   (11.08.2011 в 20:50)
 

Добиться хочу такой глупости как сократить код средствами PHP
Оно мне не мешает просто очень интересно возможно ли такое

переменные color1,color2,color3...color20 содержат цвета которые выстраиваются в ряд (не спрашивайте для чего это нужно ))) просто есть такая задача ) суть не в этом а в том чтобы через PHP вывести PHP
или одной строкой PHP вывести 20 строк в которых отличаются лишь только цифры

  Ответить  
 
 автор: cheops   (11.08.2011 в 20:59)   письмо автору
 
   для: tima2010   (11.08.2011 в 20:54)
 

В такой постановке, можно начать отталкиваться от следующего скрипта
<?php
  
for ( $i=1$i<=20$i++) { 
    
$temp "color$i";
    echo $
$temp
  } 
?>
Но вообще говоря, массивы по вашей задаче плачут :), с ними на порядок удобнее в циклах работать.

  Ответить  
 
 автор: tima2010   (11.08.2011 в 21:05)   письмо автору
 
   для: cheops   (11.08.2011 в 20:59)
 

Вот так вроде тоже работает но сами переменные как будто не работают
<?php 

for ( $i=1$i<=20$i++) { 
$peremenka "<?php $color".$i.";  ?> \n"
eval (
"\$peremenka = \"$peremenka\";");
}  

?>

  Ответить  
 
 автор: cheops   (11.08.2011 в 21:11)   письмо автору
 
   для: tima2010   (11.08.2011 в 21:05)
 

Не очень понятно, особенно, вот эта строка - в ней пропущен знак равенства?
$peremenka "<?php $color".$i.";  ?> \n"; 

PS Сложность будет нарастать, вы по сути уходите в сферу функционального программирования, для которой в языке нет поддержки. Лучше вместо 20 переменных $color1, ..., $color20 создать массив $color с 20 элементами, к которым вы сможете обращаться через $color[$i].

  Ответить  
 
 автор: tima2010   (11.08.2011 в 21:13)   письмо автору
 
   для: cheops   (11.08.2011 в 21:11)
 

Все понял, невозможно в php выполнить php ))) массив не решает задачу, спасибо за отклик.

  Ответить  
 
 автор: cheops   (11.08.2011 в 21:17)   письмо автору
 
   для: tima2010   (11.08.2011 в 21:13)
 

Да, нет от чего же, можно, просто не нужно использовать <?php и ?> в eval() - в него не передается HTML-код, поэтому нет надобности сообщать, где начинается и заканчивается PHP-код
<?php  
  
for ( $i=1$i<=20$i++) {  
    eval (
"echo \$color$i;"); 
  }   
?>

  Ответить  
 
 автор: tima2010   (11.08.2011 в 21:25)   письмо автору
 
   для: cheops   (11.08.2011 в 21:17)
 

понял, запомню а что делать если у меня такой код:

eval ("echo \$color$i = get_post_meta($post->ID, 'color$i', true); $colorfile$i = get_post_meta($post->ID, 'colorfile$i', true); $colorarray$i = wp_get_attachment_image_src($colorfile$i);"); // вырезка кода из wordpress темы  


в данном случае он ругается на =

Parse error: syntax error, unexpected '=' in ....

  Ответить  
 
 автор: cheops   (11.08.2011 в 21:30)   письмо автору
 
   для: tima2010   (11.08.2011 в 21:25)
 

Если используете двойные кавычки, нужно экранировать символ $, или использовать одиночные кавычки, чтобы не экранировать $ (правда придется использовать двойные кавычки внутри строки-кода или экранировать одиночные кавычки).
eval ("echo \$color$i = get_post_meta(\$post->ID, 'color$i', true); \$colorfile$i = get_post_meta(\$post->ID, 'colorfile$i', true); \$colorarray$i = wp_get_attachment_image_src(\$colorfile$i);");

  Ответить  
 
 автор: tima2010   (11.08.2011 в 21:32)   письмо автору
 
   для: cheops   (11.08.2011 в 21:30)
 

спасибо cheops !!! все работает!

  Ответить  
 
 автор: Гавриленко Дмитрий   (11.08.2011 в 21:49)   письмо автору
 
   для: tima2010   (11.08.2011 в 21:32)
 

Еще бы ;)

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

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