За последние 24 часа нас посетили 20639 программистов и 1109 роботов. Сейчас ищут 370 программистов ...

mysql_fetch_assoc (подумалось о красоте кода)

Тема в разделе "Прочие вопросы по PHP", создана пользователем Vladson, 6 дек 2007.

  1. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Собственно вот подумалось...
    А почему вместо

    PHP:
    1. <?php
    2. $array = array();
    3. while ($temp = mysql_fetch_assoc($result)) {
    4.     $array[] = $temp;
    5. }
    6. ?>
    Как это делают в классических случаях, не сделать "финт ушами"
    PHP:
    1. <?php
    2. for($array = array();
    3.     $temp = mysql_fetch_assoc($result);
    4.     array_push($array, $temp));
    5. ?>
    Имхо красивее...

    (или даже так если длинна строки не смущает)
    PHP:
    1. <?php
    2. for($array = array(); $temp = mysql_fetch_assoc($result); array_push($array, $temp));
    3. ?>
    Мнения ?
     
  2. Anonymous

    Anonymous Guest

    Скорость?
     
  3. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    1) имхо ничем не красивее.. полностью наобарот
    2) и скорость конечно в первую очередь
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    array_push тут не к месту ИМХО. Если заменить на $array[] = $temp, то скорость должна быть сравнима с while. Но вот "красивость" такой записи у меня вызывает сомнения.
     
  5. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    минусы
    - нестандартность
    - отсутствие блока {}
    - for оычно применяется к существующим спискам

    => глаз обязательно будет цеплятся за это место и думать

    лучше инкапсулировать это место
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    while имхо читается лучше.
     
  7. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    PHP:
    1.  
    2. <?
    3. $array = $db->QueryArray($query);
    4. ?>
    5.  
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    $array= array(); while ( $array[]= mysql_fetch_assoc( $result ) );

    наврятли, конечно, сработает...
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Зы, по сути при переборе результата с базы его обычно сразу и обрабатывают.
    Покрайней мере для меня стандартна запись вида
    PHP:
    1. <?php
    2. $result = mysql_query('SELECT fields FROM table LIMIT 0, 20', $database);
    3. if ($result && mysql_num_rows($result)){
    4.     $rows = array();
    5.     while ($row = mysql_fetch_assoc($result){
    6.         // Здесь что-то делаем с данными - htmlspecialchars и какие-то свои функции, генерирующие или обрабатывающие что-либо
    7.         $rows[] = $row;
    8.     }
    9.     $parser->set('data', $rows);
    10. }
    11. $parser->set('content', $this->template('template.htm'));
    12.  
    А в template применяю конструкцию типа
    PHP:
    1.  
    2. <? if (is_set('content')){?>
    3.     <table cellspacing="0" cellpadding="0" class="table_class">
    4.     <tr>
    5.         <th>Заголовок 1</th>
    6.         <th>Заголовок 2</th>
    7.     </tr>
    8.     <? foreach(get('data') AS $value){?>
    9.         <td><?=$value['field1']?></td>
    10.         <td><?=$value['field2']?></td>
    11.     <?}?>
    12.     </table>
    13. <?}else{?>
    14.     <div class="no-data">Данных нет</div>
    15. <?}?>
    16.  
    Удобно, просто и стандатрно для 95% случаев, когда надо вывести что-либо. Конечно это самый распросранённый случай и это пример. Реализации бывают разные. Главное идея :)
     
  10. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Даже если сработает, то потом придёца удалять последний элемент из массива.
     
  11. Anonymous

    Anonymous Guest

    тут один минус, последний false туда попадет.
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Так ли сильно важна скидка в 5 рублей при покупке Феррари ?

    Я смотрю ВСЁ что я определил в плюсы вы определили в минусы :D

    Вы прямо программисты какие-то, а как-же искусство ? :)
     
  13. Anonymous

    Anonymous Guest

    Vladson,
    не тот случай. Это то, что будет реально 100-200 раз исполнено в скрипте, но не вносит ничего нового, кроме funny syntax. Это тот случай, когда резонно сделать замер.
     
  14. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ради исскуства я тоже люблю всякие выпендрёжи.. даже тему про некорректно отрабатывающий интерпретатор php при использовании всяких красивых заморочек создавал на конкурирующем форуме ) но: я лично я не считаю твой вариант красивее

    иногда каждая копейка важна, каждая копейка увеличивается в геометрической прогрессии при огромных вложенных циклах

    Vladson
    а вообще пиши как тебе удобней :)
     
  15. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Разница мизерная, при маленьких запросах вообще разница в приделах прогрешности, а в больших запросах (вся база из 40000 записей)
    "финт ушами" 0.68сек - 0.70сек против 0.66сек - 0.68сек стандартным while с $array[]