Страница 1 из 1
[PHP] перебор 2-х массивов одновременно
Добавлено: 2010-04-21 12:08:27
Гость
Связка php+mysql.
Организуются 2 запроса:
Код: Выделить всё
$select31 = "select * from Ports where Ports.Equip_id = '$id'";
$res31 = mysql_query($select31);
$select32 = "select * from Channel_new where Point='$channel_id'";
$res32 = mysql_query($select32);
$row32 = mysql_fetch_assoc($res32);
эти запросы выдают одну и более строк.
Надо нарисовать таблицу, в которой перебираются значения нужных столбцов из этих запросов.
Если делаю
Код: Выделить всё
while ($row31 = mysql_fetch_assoc($res31)) {//0
while ($row32=mysql_fetch_assoc($res32))
...строчки таблицы
, то будет перебираться только внутренний массив $row32
если меняю while'ы местами, то будет перебор массива наоборот.
Как организовать все-таки перебор обоих массивов одновременно?
Re: перебор 2-х массивов одновременно
Добавлено: 2010-04-21 17:19:06
ProFTP
тут массив-хэшей если я правильно понял?
на perl это просто:
Код: Выделить всё
foreach (0..10) {
if $array1->[$_]->{tt};
if $array2->[$_]->{tt};
}
на php точно так же
почему бы не сделать, не поставить условия в SQL запросе? зачем это перебирать в скрипте? ну и еще вариант сделать временную таблицу...
===
я вот не понял эти массивы одинаковые?
можно попробовать так:
Код: Выделить всё
foreach ($res31 as $v) {
echo 'g='.$res31[$v]['bla'].' '.$res32[$v]['bla'] ;
}
можно еще так пройтись вдоль двух массивов, и посмотерть там посленюю структуру
['bla'] :
Код: Выделить всё
$max_a = ; // max item $res31 && $res32
for ($i=0; $i<=$max_a; $i++)
{
echo 'g='.$res31[$i]['bla'].' '.$res32[$i]['bla'] ;
}
Re: перебор 2-х массивов одновременно
Добавлено: 2010-04-21 17:20:41
Гость
человек на PHP пишет, что не видишь
Re: перебор 2-х массивов одновременно
Добавлено: 2010-04-21 17:23:45
ProFTP
перебирать структуры в скрипте на php, если можно в mysql - это не благородное дело, это zg, тоже, говорил
вариант на php я написал, только если он подойдет... мне показалось что очень странный вариант решения такого перебора
Re: перебор 2-х массивов одновременно
Добавлено: 2010-04-21 20:11:18
Гость
просто в цикле надо вывести последовательно номера портов оборудования и клиенты, подключенные к каждому из портов.
Каждый из запросов будет возвращать одну строку для таблицы. Чтобы вывести все строки - вот и организую цикл while.
Но получается, что внешний while не срабатывает (т.е. значения не перебираются, а выводится только первое совпадение)
Re: перебор 2-х массивов одновременно
Добавлено: 2010-04-29 8:16:04
BlackCat
Значение возвращаемое
mysql_query() - это не массив, это "ресурс". Для извлечения строки как раз и используется функция
mysql_fetch_assoc(). Отличае в том, что по массиву вы можете пройти несколько раз, а вот строку из ресурса второй раз получить нельзя. Ваш второй вложенный цикл при втором и последующих выполнениях как раз пытается извлечь строку, которой уже нет.
Если вам требуется получить именно массив и потом с ним работать, попробуйте сначала извлечь все строки из результата:
Код: Выделить всё
/* Perform queries */
$res_1 = mysql_query($query_1);
$res_2 = mysql_query($query_2);
/* Construct arrays */
$arr_1 = array();
while($row = mysql_fetch_assoc($res_1))
$arr_1[] = $row;
$arr_2 = array();
while($row = mysql_fetch_assoc($res_2))
$arr_2[] = $row;
/* Process arrays */
foreach($arr_1 as $item_1) {
foreach($arr_2 as $item_2) {
/* Your proccessing code here ... */
}
}
=====
Ещё раз повторю слова тов.
ProFTP, которые присутствуют в любой книге о php+mySQL: не надо в скрипте делать то, что может сделать СУБД - это только снижает производительность. Подумайте о том, как сделать один запрос и потом вывести всё одним циклом - это действительно возможно в 99% случаев.