За последние 24 часа нас посетили 23936 программистов и 1559 роботов. Сейчас ищут 966 программистов ...

Re: Добавление двумерного массива в циклах

Тема в разделе "PHP для новичков", создана пользователем Ganzal, 22 янв 2016.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Пользователь sergei1094, автор этой темы, удалён вместе со всем своим говном. Поэтому тема выглядит странно :) Автор также наследил под именем damid818.
         — модераторъ


    покажи что ты хочешь
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    описание таблиц дай
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    селект то-то джоин сё-то туда-то вот так-то. только и всего.
    дай. описание. таблиц.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    затем. дай описание таблиц. не те запросы которые ты делаешь а описание. в тех запросах астериски - я хер чо понял. не хочешь чтоб тебе помогали - гуляй.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    sergei1094, а как ты пользователя привязываешь к городу?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    sergei1094, слыш тезка, я не просил давать мне характеристик. я и так вижу что и как у тебя. по коду. я попросил описание таблиц. не пароли, не ключи от квартиры. описание таблиц. ты не знаешь как сделать описание таблиц? спроси у меня как. чо ты истеришь как маленькая?

    select * from users u left join cities c on u.city_id = c.city_id

    держи. одним запросом можно получить готовую таблицу. не делать миллиард запросов в цикле а просто сразу одним запросом. с кодом итерации результата тоже за тебя надо все сделать? ну тут как бы раздел для новичков но ты что-то не хочешь чтоб тебя учили...
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну ты же хочешь научиться программированию? иди терминологию незнакомую нагугли
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    чувак. ты делаешь раз запрос и потом пока ты его итерируешь - делаешь еще туеву хучу запросов. я дал тебе для начала как не делать говнокод. спасибо где? надо красивый массив формировать? ну так временная переменная, сравнение значений. давай какие у тебя варианты.
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну так это именно так и пишется
    Код (PHP):
    1. $arr[0][1] = 2;
    2.  
    https://secure.php.net/manual/ru/language.types.array.php#l ... .modifying - здесь описано
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    давай ты для начала перепишешь запрос, ок? а когда перепишешь - посмотри в каком удобном виде приходят данные. а дальше дело техники. есть ключ - добавляем пользователя. нет ключа - создаем ключ и потом добавляем пользователя.
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    то есть ты настаиваешь на том что делать запросы в цикле - нормально?
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не затруднит. объясняю.
    есть у тебя таблица (сильно упрощу для скорости) городов - ид-города, название-города. и таблица юзеров - ид-юзера, ид-города, имя-юзера

    в таблице городов:
    Код (PHP):
    1. city_id | city_name
    2.       1 | Караганда
    3.       2 | Астана
    в таблице юзеров:
    Код (PHP):
    1. user_id | city_id | user_name
    2.       1 |       1 | Саша
    3.       2 |       2 | Лёша
    4.       3 |       1 | Петя
    5.       4 |       1 | Вася
    6.       5 |       2 | Гена
    7.       6 |       2 | Володя
    твой вариант: выбираем все города. далее в цикле делаем столько запросов (на список пользователей из этого города) сколько выбралось городов.
    то есть на тысячу городов будет тысяча запросов. субд просто ляжет от того что ей придется регулярно делать такие выборки.

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

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

    Код (PHP):
    1. select * from users u left join cities c on city_id
    выбрать все поля из таблицы юзеров, присоединив к ним все поля из таблицы городов где идентификатор города в строке пользователя совпадает с идентификатором города в таблице городов.

    на выходе ты получаешь примерно такую результирующую таблицу:
    Код (PHP):
    1. user_id | city_id | user_name | city_name
    2.       1 |       1 | Саша      | Караганда
    3.       2 |       2 | Лёша      | Астана
    4.       3 |       1 | Петя      | Караганда
    5.       4 |       1 | Вася      | Караганда
    6.       5 |       2 | Гена      | Астана
    7.       6 |       2 | Володя    | Астана
    как видишь уже достаточно удобно для чтения. но тебе надо массив массивов оформить группируя по городам. как я уже сказал - проверил ключ, создал если нет, закинул если (или если уже) есть.

    Код (PHP):
    1. $data = [];
    2. while($row = mysqli_fetch_array($connection, $result) // начало тела цикла итерации результата
    3. {
    4.   if (!isset($data[$row['city_name']])) // если нет такого имени города в ключах массива дейта
    5.   {
    6.     $data[$row['city_name']] = []; // объявим такой ключ как массив
    7.   }
    8.   
    9.   $data[$row['city_name']][] = $row['user_name']; // закинем в "город" новое имя
    10. } // конец тела цикла итерации результата     
    как видишь еще и код элегантный получается.
    я ожидаю от этого кода решения твоей задачи.
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а что такое нормальный вид?
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    sergei1094, а почему ты думаешь, что можешь что-то требовать?
    Ты уж постарайся сделать сам, если не умеешь общаться. Забываешь говорить "спасибо" и "пожалуйста", дружок.

    [offtopic]Не раз замечал, что жители тюркоязычных регионов кажутся грубыми. Их как-будто унижает необходимость просить и благодарить. Дело, думаю, не в национальности (это могут быть русские, евреи, кто угодно), а в местных культурных особенностях.[/offtopic]
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    sergei1094 сделай сортировку в mysql через ORDER BY по полю city_id, в том запросе что тебе дал Ganzal, тогда можно будет загнать во временную переменную city_id и как он меняется при цикле выводить название города и данные, если city_id не изменился, то просто данные, выйдет тот список что тебе нужен, так как список отсортирован по городам и они идут по порядку.
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вообще-то мой код уже создает нужный массив. вывод: ты нихyяшечки не запускал тот код из комментария, на который я потратил целых пятнадцать минут своей драгоценной жизни. а мог мы мид тащить да варды ставить. в общем огорчил ты меня.
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    может у тебя версия PHP старая? Прошлого тысячелетия например.

    Добавлено спустя 1 минуту 11 секунд:
    Как ты определил, может ты не правильно им воспользовался?
    Почему не спросить нормально? Сказать что выходит ошибка или не работает но с чего начать ты не знаешь.
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну извини, Серёга, что У ТЕБЯ старая версия пхп. я давно пишу на актуальных и СЛУЧАЙНО употребил синтаксис несовместимый с ТВОИМ ГОВНОМ МАМОНТА. да, я плохой. а ты опять постеснялся спросить. как и до этого с пеной у рта отказывался выдавать структуру таблиц. вот так ТЫ хочешь чтоб тебе помогли, ага.

    Добавлено спустя 59 секунд:
    ну замени $data=[]; на $data=array(); и ошибка исчезнет а моя репутация реабилитируется
     
  19. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    так ты ж и сказал, дурачок.
    пользуясь случаем делаю тебе официальное предупреждение: надо быть вежливым или катись к чертовой бабушке. найди форум единомышленников и груби им.
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну в моем-то СВОЕОБРАЗНОМ коде совсем не такая конструкция. там я действительно объявляю массив. а у тебя какое-то упоминание ключа-пустой-строки.
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты чувак вообще не понимаешь программирования. ты создал массив. массив это просто набор значений. значения в массиве могут быть любыми - целочисленными, плавающими точками, булевыми, строковыми, объектами, и (внимание!) другими массивами. так вот, когда ты пишешь $data[0][1] ты обращаешься к ключу 1 массива, который хранится в ключе 0 массива который уже в свою очередь хранится в переменной дейта. то есть $data - массив и $data[0] - тоже массив. так вот я намекаю тебе на то что когда ты создаешь ключ в массиве дейта ты должен указать что значение этого ключа тоже массив чтоб потом в него добавлять ряд данных.

    извини, ты просил город-имя-имя-город-имя-имя
    и я тебе так и сделал.

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

    зы. тут раздел для новичков. тут учатся, знаний набираются. а ты получил халявку. и еще нахамил всем кто с тобой общался. подумай над своим поведением.
     
  22. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Ganzal, а зачем это ?
    Код (PHP):
    1. if (!isset($data[$row['country_name']])) {
    2.     $data[$row['country_name']]=[];
    3. }
    всегда же просто так делали
    Код (PHP):
    1. while ($row = mysqli_fetch_array($sql)) {
    2.     $data[$row['country_name']][] = $row['user_name']
    3. }
    просто потому что инициализировать вроде правильнее ?

    Добавлено спустя 2 минуты 10 секунд:
    я понимаю инициализацию нужна, если переменной вообще не существует. но тут то просто индекса массива нету
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    просто привычка явно указывать с каким значением/типом переменной будет далее проводиться работа. да, что-то вроде инициализации.
     
  24. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    В принципе согласен, для наглядности не помешает
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    дело, наверное, не в наглядности. сейчас мы работаем с массивом и можем добавлять ключи, а, допустим, если пытаться сделать инкремент числовому значению - схватишь нотис неизвестного ключа массива. то есть в случае с числом - приходится явно объявлять значение. чем мешает объявление пустого массива? да ничем. зато нотисов уж точно не будет.