Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Перекомпановка массива
Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
Я делаю функцию вывода данных из бд в виде ассоциативного массива. То есть функция должна возвращать готовый ассоциативный массив (с которым можно работать циклами foreach и for, а не только while), а не ресурсы.
snikers987
Отправлено: 06 Марта, 2012 - 08:21:34
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Помог: 25 раз(а)
А что Вам мешает переберать двумерный массив из первого поста?
Но вернемся к вашей "проблеме".
Если имена и кол-во ключей не известны,
нужно сперва получить массив полностью в вашем "первичном" виде,
и только потом его перебрать тем (или похожим) способом который я показал.
Не вижу проблемы.. (Добавление) snikers987, foreach плох тем что для перебора копируется оригинальный массив.
В моем примере для нескольких ассоциативных ключей,
во внутреннем цикле, в любой из итераций это не так страшно.
А если в основном массиве, который перебирает внешний цикл, будет > 1000 ключей?
Таки призываю юзать for!
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
Даже так - при использовании for, такого точно не будет.
Отчего же? Будет.
Если надо сделать какое-то действие с переменной - что foreach, что for, что while, хоть та же рекурсия - вам понадобится куда-то сохранить её.
Иначе - копирования происходить и не будет.
DeepVarvar пишет:
Да, foreach есть обертка от for и ведет себя как ф-ция..
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Цитата:
если бы в PHP существовали реальные целочисленные массивы то доступ к ним был бы конечно более быстрым использовации цикла for - однако в PHP представлены именно ассоциативные массивы для которых даже числовой индекс является ключом По этой причине обращение к некоторому элементу массива влечет за собой поиск указанного ключа во внутреннем списке - а при использовании цикла for генерируется много элементов для поиска на основе образующей строки
В то же время цикл foreach использует реальный внутренний индекс массива - который является именно числовым и обозначает все содержащиеся в нем элементы в некоторой последовательности - причем без пропусков в нумерации Именно такой способ доступа реализует наиболее прямое обращение к элемента - а следовательно и является самым быстрым
Убедительно! Намотал на ус. Специфика интерпретируемого ЯП...
Покинул форум
Сообщений всего: 24
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
Читая мануалы по MySQL, я обратил внимание что при выводе ответа от функции mysql_query() всегда используется цикл while, я попробовал вывести циклом foreach, но на выходе ничего не оказалось, массив был пуст, но это можно обойти если использовать foreach вот так foreach($resource as $key=>$value) и все прекрасно выводиться... Я пишу класс для работы с бд MySQL что то напоминающего по типу PDO, и использую некоторые функции по экранированию, но это на малость но замедляет работу, а хочется сделать его максимально быстрым, вот и возмещаю скорость как можно меньшим количеством операций... Если надо могу выложить класс, он по весу мал, но работает вроде пока без сбоев.. Может что то подскажете, что я сделал не так... За критику был бы благодарен...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.