Два while и итерация

 
0
 
PHP
ava
Jops | 27.03.2013, 12:42
Здравствуйте уважаемые!
Проблема в следующем:
Есть два while (один в другом).
Первый строит первые две ячейки таблицы в строке.
Второй наполняет третью ячейку данными на основе ID (сверяется с данными из первого while) из выборки.
Ну а суть проблемы очевидна:
Второй while начинает итерацию со второй строки (следовательно, данные из первой строки, относящиеся по ID, не выводятся), а при последующих с третьей (и не меняя строки идёт до конца)
Надо поменять конструкцию. Полдня перебирал статьи, но ни чего так и не смог примастрячить.
Работа с pg_fetch_array на лицо и всем известна (отсюда и проблемы), но на что заменить, не доходит
Помогите советом, а лучше кодом, если есть желание.
Ниже код и рисунок таблицы (как есть и как надо).
Благодарю, всех кто откликнется!


while ($data = pg_fetch_array($res)) {
            $idsu = $data['user_id'];
                echo "<tr>
                        <td>{$data['count']}</td>
                        <td>" . sprintf($links[$data['call_type']]['user'], $data['user_id'], $data['user_name']) . "</td>";
            ?>
            <td>
                <?
                while($data = pg_fetch_array($res)){
                    
                    if (in_array($data['call_type'], array(1, 2 ))) {
                $xml = simplexml_load_string($data['comm']);
                $data['comm'] = array();
                foreach ($xml->phrase as $phrase) {

                    if (!empty($phrase->comm)) {
                        $data['comm'][] = sprintf('<span title="%s" class="t-line">%s</span>', $phrase->comm, $phrase->title);
                    } else {
                        $data['comm'][] = $phrase->title;
                    }
                }
                $data['comm'] = implode(', ', $data['comm']);
            }
                    if($idsu === $data['user_id'] ){
                        echo " {$data['comm']} <br>";
                    }else{
                        break;
                    }
                }?>
            </td>
            <?
            echo"<td><a href='?action=report&type=inc_calls_period_info&id=$idsu&start=$start&end=$end' 
                target='_blank'>Просмотр</a></td>";
    }
Comments (4)
ava
bars80080 | 27.03.2013, 11:51 #
надо всего лишь отделить сбор данных от выдачи

вначале сливаете в массив всю выборку, а потом уже крутитесь с ней как хотите
ava
Jops | 27.03.2013, 11:58 #
Пожалуйста, если не сложно, по подробнее. Беда с массивами)
ava
bars80080 | 27.03.2013, 12:17 #

$result = array(); $i = 0;
while ($data = pg_fetch_array($res)) {
    $result[$i] = $data; $i++;
}
$result_count = $i;


и далее идёт твой кусок кода, где первый while меняешь на


for($i = 0; $i < $result_count; $i++) {
    $data = $result[$i];


а второй на


for($j = 0; $j < $result_count; $j++) {
    $data2 = $result[$j];


и далее суёшь их как надо, куда надо и т.п.
ava
Jops | 27.03.2013, 12:42 #
Спасибо! Попробую!
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  bars80080   Jops
advanced
Submit