За последние 24 часа нас посетили 68814 программистов и 10340 роботов. Сейчас ищут 3009 программистов ...

Как правильно записать в массив данные из БД?

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

  1. Cupidon90

    Cupidon90 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    7
    Симпатии:
    0
    Всем доброго времени суток! Впервые коснулся массивов в php и сразу трудности... Пытаюсь записать в массив данные из БД, но данные не сохраняются... подскажите хотя бы направление - что не так? Вот мой код:

    Код (PHP):
    1. $z = 1; // Счетчик для ключей массива 
    2.  
    3. $query = mysql_query("SELECT id_card, owner FROM `game_4x4` WHERE id_game='$id_game'");
    4. while($row = mysql_fetch_array($query)){
    5.     $idcard = $row['id_card'];
    6.     $owner = $row['owner'];    
    7.     
    8.     $M_owner = array ($z=>$owner);                
    9.     $z++;
    10. }     
    Если попытаться обратиться к элементу массива ни чего не выводит - пустота
    Вот как обращаюсь:

    Код (PHP):
    1. echo "<br>M_owner = ".$M_owner[1].""; 
    Массив почему то не заполняется а остается пустым, значение сохраняется только на 1н цикл и то для конкретного ключа...

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    давай с другой стороны зайдем. что в итоге-то ты хочешь?
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Если бы попытке что-то куда-то записать предшествовало изучение языка, то было бы написано
    Код (PHP):
    1. $M_owner[$z] = $owner;
    2.  
    поскольку строчка
    Код (PHP):
    1. $M_owner = array ($z=>$owner);    
    2.  
    перезаписывает содержимое переменной $M_owner на массив из одного элемента. А та строчка, что я привёл - создаёт новый элемент (или перезаписывает старый, если он существует, что в данном случае не так) с индексом $z.
     
  4. Cupidon90

    Cupidon90 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    7
    Симпатии:
    0
    Я решил написать игру покер - интересно как она работает, так сказать "изнутри".
    В БД у меня хранится колода карт 36шт, конкретной игры.

    таблица выглядит так:
    id id_game id_card number suit(масть) status owner(владелец)
    пример:
    1 1 1 6 пики обычная колода
    1 1 2 6 буби обычная колода
    1 1 3 6 крести козырная колода
    и тд.

    На данный момент владельцем карты является колода (карты не розданы).
    Задача 1(на данный момент). Раздать к примеру по 6 рандомных карт четверым игрокам, тем самым присвоить к каждой карте нового владельца
    пример:
    1 1 1 6 пики обычная Игрок1
    1 1 2 6 буби обычная колода
    1 1 3 6 крести козырная Игрок2
    и тд.

    И так мы приближаемся к сути проблемы - если я буду брать радномное число от 1 до 36 и соответствующей id_card присваивать владельца, то будут попадаться одинаковые числа. Мне нужно сделать проверку - не была ли карта уже присвоена.
    Если я буду каждый раз отправлять запрос в БД с рандомным числом и проверять не была ли присвоена эта карта - это будет колапс...
    Поэтому я решил дублировать колоду из БД в массив и делать проверку там, если карта не повторяется то присваивать ее владельцу если повторилась то искать следующую карту.

    Вот такая дикая история ))) А дальше я пытался сделать так но не получилось:
    Код (PHP):
    1. $z = 1; // Счетчик для ключей массива 
    2.  
    3. $query = mysql_query("SELECT id_card, owner FROM `game_4x4` WHERE id_game='$id_game'");
    4. while($row = mysql_fetch_array($query)){
    5. $idcard = $row['id_card'];
    6. $owner = $row['owner'];    
    7.  
    8. $M_owner = array ($z=>$owner);    
    9. $z++;
    10. } 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
     
  5. Cupidon90

    Cupidon90 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    7
    Симпатии:
    0
    Спасибо mkramer(у), моя ошибка была в том что я не осознавал что $M_owner это всего лишь переменная а не массив. Я думал что если написать $M_owner = array (1=>'значнеие') то $M_owner будет уже массивом. Спасибо за разъяснения и помощь!

    Вот что у меня получилось в итоге - все работает как и хотелось:
    Код (PHP):
    1. $z = 1; \\ Счетчик для ключей массива
    2. $query = mysql_query("SELECT id_card, owner FROM `game_4x4` WHERE id_game='$id_game'");    
    3. while($row = mysql_fetch_array($query)){
    4.     $idcard = $row['id_card'];
    5.     $owner = $row['owner'];
    6.     
    7.     $M_owner[$z] = $owner;
    8.     $z++;
    9. } 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    После этого оператора в переменном $M_owner будет массив с одним значением. Но этот оператор не добавляет новое значение. Вот в чём разница, а то что вы написали - бред. Почитайте https://secure.php.net/manual/ru/language.types.array.php