За последние 24 часа нас посетили 53402 программиста и 1719 роботов. Сейчас ищут 875 программистов ...

Как присвоить переменной результат выполнения цикла?

Тема в разделе "PHP и базы данных", создана пользователем krum, 7 фев 2009.

  1. krum

    krum Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    Москва
    Есть таблица "news", в которой два поля: "id" и "text". При запросе:
    Код (Text):
    1. $query = "select * from news";
    2. $result = mysql_query($query);
    3. $num_results = mysql_num_rows ($result);
    4. for ($i=0; $i <$num_results; $i++) {
    5. $row = mysql_fetch_array ($result);
    6. echo $row['text'] = substr($row['text'], 0, 100). "... <a href=\"#\">Читать далее.</a>;
    7. }
    выводятся все записи из поля "text".

    Моя задача состоит в том, чтобы присвоить результат выполнения этого цикла одной переменной, допустим $output.
    И, естественно, без вывода оператором "echo" в цикле. Выводится будет именно переменная "output".
    Например, результат выполнения цикла:

    тра ля ля, тра ля ля, тра ля ля, тра ля ля, ... Читать далее

    бла бла бла, бла бла бла, бла бла бла, б ... Читать далее

    А мне надо, весь результат цикла не выводить, а присвоить переменной $output, а затем уже вывести. Вот так:
    Код (Text):
    1.  
    2. $output = 'тра ля ля, тра ля ля, тра ля ля, тра ля ля, ... <a href="#">Читать далее</a><br>
    3.                бла бла бла, бла бла бла, бла бла бла, б  ... <a href="#">Читать далее</a><br>';
    4. echo $output;
    Т.е.
    Код (Text):
    1.  
    2. $output = for ($i=0; $i <$num_results; $i++) {
    3.               $row = mysql_fetch_array ($result);
    4.               echo $row['text'] = substr($row['text'], 0, 100). "... <a href=\"#\">Читать далее.</a>;
    5.                                               };
    И еще один вопрос:
    Можно ли в самом запросе MYSQL при выборе всех строк из поля "text" из каждой строки выбирать только первые допустим 100 символов или до первой точки в этой строке?
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    $output.="...";
    ili massiv sdelatb
     
  3. krum

    krum Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    Москва
    Честно говоря, не совсем понятно.
    Можно с примерами?
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    PHP:
    1. <?
    2. $output="Text";
    3. $output.="<br>Text 2";
    4. print $output;
    5.  
    6. $output=array();
    7. $output[]="text1";
    8. $output[]="text2";
    9. print implode("<br>",$output);
    10. ?>
     
  5. krum

    krum Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    Москва
    Видимо ты так и не понял моего вопроса :( . Тогда объясню еще раз подробнее.
    Структура сайта: index.php, template.tpl, config.php и engine.php.
    Содержание template.tpl:
    HTML:
    1.  
    2. <title>{TITLE}</title>
    3. </head>
    4. {OUTPUT}
    5. </body>
    6. </html>
    7.  
    Содержание index.php:
    PHP:
    1.  
    2. <?
    3. require "engine.php";
    4. require "config.php";
    5. $tpl->get_tpl('template.tpl');
    6. $tpl->set_value('TITLE', $title);
    7. $tpl->set_value('OUTPUT', $output);
    8. $tpl->tpl_parse();
    9. echo $tpl->html;
    10. ?>
    11.  
    Содержание config.php:
    PHP:
    1.  
    2. <?
    3. if ($page)
    4. $query = "select * from $page";
    5. $result = mysql_query($query);
    6. $row = mysql_fetch_array ($result);
    7. $title = $row['title'];
    8. $output = $row['text'];
    9. ?>
    10.  
    В файле engine.php производится замена {TITLE} и {OUTPUT}
    соответствующими переменными $title и $output.

    База данных содержит таблицы price, contact, news.
    В таблицах price и contact всего одна строка с полями id и text.
    Соответственно, если $page=price то переменная $output получает
    строку из таблицы price из поля text, что видно из файла config.php.
    Но.. В таблице news не одна строка, там их может быть хоть 1000.
    Выводить по одной нужной строке из таблицы news проще простого:
    PHP:
    1.  
    2. <?
    3. if ($page)
    4. $query = "select * from $page WHERE id=$id";
    5. $result = mysql_query($query);
    6. $row = mysql_fetch_array ($result);
    7. $title = $row['title'];
    8. $output = $row['text'];
    9. ?>
    10.  
    Передавая в запросе не только значение переменной $page, но и значение переменной $id.

    А вот как вывести все строки из таблицы news и передать их в переменную $output?
    Вот в чем вся суть вопроса!
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    while( $row = mysql_fetch_array ($result)) {
    $output[]=$row;
    }
    print_r($output);
     
  7. krum

    krum Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    Москва
    Уже ближе )) Чтобы вытаскивать только из поля text я подправил код:
    PHP:
    1.  
    2. while( $row = mysql_fetch_array ($result)) {
    3. $output[]=$row['text'];
    4. }
    5. print_r($output);
    6.  
    Но.. Мне нужен конечный результат в виде:
    $output =
    Вот так не получается:
    PHP:
    1. $output = print_r($output);
    Выдает ошибку:
    Fatal error: [] operator not supported for strings in (номер строки)
    Вот эта строка:
    $output[]=$row['text'];
    Если изменить:
    PHP:
    1.  
    2. while( $row = mysql_fetch_array ($result)) {
    3. $massiv[]=$row['text'];
    4. }
    5. $output = print_r($massiv);
    6.  
    То в нужном месте, т.е. там, где стоит {OUTPUT} выводится: 1
    А весь маcсив выводится сверху )) Т.е. срабатывает print_r прямо в config.php
    выглядит он так:

    Мне же надо получить в переменную $output уже отформатированный текст,
    без "Array ( [0] =>" и, желательно, в таком виде:
    PHP:
    1.  
    2.  $output = 'тра ля ля, т... <a href="#">Читать далее</a><hr />
    3. бла бла бла... <a href="#">Читать далее</a><hr />
    4. трям трям, т...  <a href="#">Читать далее</a><hr />';
    5.  
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    while( $row = mysql_fetch_array ($result)) {
    $output.=$row['text'];
    }

    ili

    implode("",$output) esli massiv

    tam estb vse funkcii http://php.ru/manual
     
  9. krum

    krum Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    Москва
    Супер! Теперь то, что надо! Огромнейший респектище! ))
    Можно последнюю подсказочку?
    При таком коде:
    PHP:
    1.  
    2. while( $row = mysql_fetch_array ($result)) {
    3. $massiv[]=$row['text'];
    4. }
    5. $output = implode("<hr />",$massiv);
    6.  
    Я получаю такой вывод:
    Как бы еще в каждую строку засунуть ссылочку с id этой строки?
    Выглядеть должно вот так:
    А.. чуть не забыл.. Каждую строку надо урезать до определенного количества символов, допустим до 100.
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    krum
    засовывай в цикле
    урезай substr()
     
  11. krum

    krum Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    6
    Симпатии:
    0
    Адрес:
    Москва
    Да.. Ты прав.. Чего то я даже перестал думать на радостях )) Все работает, как часы! Огромнейшее спасибо! С меня пиво ))