[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с массивом и циклом
maq
У меня еще один вопрос. Есть два запроса
PHP
$sSql "SELECT * .........";
$rTowns mysql_query($sSql) or die(mysql_error());

$sSql "SELECT ..........";
$rResCount mysql_query($sSql) or die(mysql_error());

mysql_close($hDb);
for(
$data=array(); $row=mysql_fetch_assoc($rCat); $data[]=$row)
{
    
$bFound 0;
    for(
$dataA=array(); $rowA=mysql_fetch_assoc($rResCount); $dataA[]=$rowA)
    {
        if(
$rowA['cat_id'] == $row['cat_id'])
        {
            
$bFound 1;
            
//break();
            
print " - " $rowA['rs_count'];
        }
        print 
$rowA['cat_id'];
    }
    if(
$bFound == 0) print " - 0";
}

1. каким оператором можно выйти из цикла
2. массив $dataA перебирается лишь 1 раз (при первом элементе в $data). Я так понимаю это принцип PHP. Как "заставить" массив $dataA перебирать элементы повторно.

Спасибо cool.gif



Спустя 4 минуты, 18 секунд (26.06.2009 - 22:03) kirik написал(а):
Цитата (maq @ 26.06.2009 - 13:59)
каким оператором можно выйти из цикла

break;

Цитата (maq @ 26.06.2009 - 13:59)
2. массив $dataA перебирается лишь 1 раз (при первом элементе в $data). Я так понимаю это принцип PHP. Как "заставить" массив $dataA перебирать элементы повторно.

Попробуй ему reset(); сделать. А какая вообще логика в этом скрипте?

Спустя 5 минут, 42 секунды (26.06.2009 - 22:09) glock18 написал(а):
да, и селекты очень интересные. боишься, что спишем? smile.gif

Спустя 3 часа, 10 минут, 26 секунд (27.06.2009 - 01:19) Dezigo написал(а):
PHP
for($data=array(); $row=mysql_fetch_assoc($rCat); $data[]=$row)
{
    
$bFound 0;
    for(
$dataA=array(); $rowA=mysql_fetch_assoc($rResCount); $dataA[]=$rowA)
  {
  }
}

ужас! что это вообще такое???? ohmy.gif
объясни что ты хочешь сделать.
бред не понятный ohmy.gif

цикл с условием это while.
объясни blink.gif
набор какойто

Спустя 50 минут, 49 секунд (27.06.2009 - 02:10) dedal.qq написал(а):
Хм, да, тут, что то страшное, может лучше написать, что то вроде:

PHP
for($i=0; $i<count($data); $i++)
{
    $bFound = 0;
    for($j=0; $j<count($dataA); $j++)
  {
  }
}


???

Спустя 7 часов, 27 минут, 24 секунды (27.06.2009 - 09:37) glock18 написал(а):
dedal.qq
может лучше попробовать сначала, а потом вопрос задавать?

Спустя 2 часа, 29 минут, 56 секунд (27.06.2009 - 12:07) Kuliev написал(а):
PHP
for($data=array(); $row=mysql_fetch_assoc($rCat); $data[]=$row)
// Откуда взялась переменная $rCat ???

blink.gif

Спустя 56 минут, 2 секунды (27.06.2009 - 13:03) dedal.qq написал(а):

Цитата
может лучше попробовать сначала, а потом вопрос задавать?


Так откуда я могу знать, что надо аффтору и что у него должно быть там написано, я тока могу строить предположения. =)

Спустя 5 часов, 30 минут, 52 секунды (27.06.2009 - 18:34) glock18 написал(а):
dedal.qq
Ха, сорри smile.gif Не заметил huh.gif

автор сам пропал... наверно осмысливает информацию и копается в мануалах rolleyes.gif похвально... smile.gif

Спустя 4 часа, 4 минуты, 30 секунд (27.06.2009 - 22:39) maq написал(а):
Цитата
А какая вообще логика в этом скрипте

Я думал, что вы и сами поймете видя 2 цикла - один внутри другого (и видя сравнение значений).
Ну ладно, попробую объясниться.

Выполняются 2 запроса SELECT.
PHP
$sSql "SELECT * FROM t_Categories ORDER BY t_Categories.cat_lname";
$rCat mysql_query($sSql) or die(mysql_error());

$sSql "SELECT t_Categories.* , Count(t_Resumes.rs_id) AS rs_count FROM t_Categories LEFT JOIN t_Resumes ON t_Categories.cat_id = t_Resumes.rs_cat" . ($nTown>" WHERE t_Resumes.rs_town = " $nTown "")  . " GROUP BY t_Categories.cat_id ORDER BY t_Categories.cat_lname";
$rResCount mysql_query($sSql) or die(mysql_error());

mysql_close($hDb);
for(
$data=array(); $row=mysql_fetch_assoc($rCat); $data[]=$row)
{
    
$bFound 0;
    for(
$dataA=array(); $rowA=mysql_fetch_assoc($rResCount); $dataA[]=$rowA)
    {
        if(
$rowA['cat_id'] == $row['cat_id'])
        {
            
$bFound 1;
            
//break();
            
print " - " $rowA['rs_count'];
        }
        
//print $rowA['cat_id'];
    
}
    if(
$bFound == 0) print " - 0";
}

Теперь, если понятен мой вопрос, буду рад услышать возможные решения rolleyes.gif

Спустя 11 минут, 7 секунд (27.06.2009 - 22:50) Семён написал(а):
Умеет использовать JOIN-ы в SQL, а такие вопросы задаёт и такой стиль оформления кода. ohmy.gif

На счёт повторного выполнения цикла... хм... может цикл в цикле? blink.gif

Спустя 11 часов, 55 минут, 24 секунды (28.06.2009 - 10:45) maq написал(а):
Цитата
Умеет использовать JOIN-ы в SQL, а такие вопросы задаёт и такой стиль оформления кода.  ohmy.gif

Так ответ сразу. Запросы не меняется. Запросы нужны именно в таком стиле.
А насчет стиля оформления кода читайте название подраздела форума "... для начинающих". А я не слишком хорошо знаком со всеми функциями и операторами PHP. Но как не кстати срочно надо. Кое-что читаю, но еще не все...

Спустя 3 часа, 35 минут, 32 секунды (28.06.2009 - 14:21) glock18 написал(а):
maq, Семен имел ввиду, что JOIN в общем то такая штука, которую новички обычно не знают и понять не могут smile.gif

теперь по вопросу

Цитата
Ну ладно, попробую объясниться.


достаточно плохо попробовал, если честно. потому что после этого идет

Цитата
Выполняются 2 запроса SELECT.

что и так видно из приложенного кода. Код сам по себе весьма нелогичен.

а так понимаю, что тебе надо параллельно вытаскивать из обоих массивов элементы так, чтобы
1. из первого вытаскивается категория.
2. из второго всякая всячина относящая к этой категории.

при этом количество строк в каждом из результатов будет одно и то же, а соответствующие строки будут иметь соответствующие индексы.

проходишь в одном цикле:
1. вытаскиваешь из обоих результатов по строке.
2. кладешь куда надо.

и по-новой. второй цикл здесь ни к чему. тем более усложняет понимание того, что ты хочешь делать. лично мне пришлось запросы сравнить, чтобы понять, а должно быть понятно просто из самой структуры smile.gif это так, чтобы тебе было к чему стремиться wink.gif

Спустя 2 часа, 27 минут, 48 секунд (28.06.2009 - 16:49) maq написал(а):
2 массива - это результаты 2-х различных SQL запросов, не всегда возвращающих одинаковое количество записей.
Цитата
второй цикл здесь ни к чему

Почему? ohmy.gif
По 2-му циклу могу пройти (все элементы) всего лишь 1 раз. Может у меня не самый удачный пример перебора по записям SQL запроса.

Спустя 25 минут, 21 секунда (28.06.2009 - 17:14) glock18 написал(а):
Цитата (maq @ 28.06.2009 - 13:49)
2 массива - это результаты 2-х различных SQL запросов, не всегда возвращающих одинаковое количество записей.


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

проверь mysql_num_rows если хочешь. конечно, если t_Categories.cat_id - уникальный ключ.

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

Спустя 2 часа, 54 секунды (28.06.2009 - 19:15) maq написал(а):
Цитата
выбрал бы сначала все строки в массивы. а уже потом проходил по ним, не городя огород с mysql_fetch_assoc во вложенных циклах

А можно пример?

Спустя 40 минут, 6 секунд (28.06.2009 - 19:55) glock18 написал(а):
я же тебе сказал, что тебе не нужны тут вложенные циклы. сделай, как я тебе до этого сказал. а пример... неужели смысл не понятен? сначала циклом выбираешь все записи в массив. для обоих запросов. а потом проходишь циклом по тому массиву, который предположительно больше (если такого нет, то по любому можно, только с небольшими изменениями), а на определенных итерациях (к примеру у массива сменился элемент cat_id) сдвигаешь итератор у другого массива.

Спустя 18 часов, 42 минуты, 33 секунды (29.06.2009 - 14:37) maq написал(а):
glock18
покопался в функциях массивов, разобрался! Спасибо tongue.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.