За последние 24 часа нас посетили 20345 программистов и 1012 роботов. Сейчас ищет 371 программист ...

Язык и сессия

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

  1. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    так так так))) и каким же будет выходное значение масс?
     
  2. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Array to string conversion =)) реакция на echo $mass; А так все отлично работает. Нет Notice, Warning и Fatal error=))
     
  3. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    А Array to string conversion - это не нотис? :)
     
  4. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Notiсe, но это если я пишу echo $mass; а так данные нормально передаются=) Как я понимаю эту ошибку- Преобразование массива в строку. Он должен нормально на echo $mass; реагировать?
     
  5. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    А не, всё правильно. Переменная же при инициализации и присвоении значения должна принять тип того, что в неё суют. Тогда да, всё и должно работать. :D

    Добавлено спустя 1 минуту 24 секунды:
    Хотя я ещё раз подумал. А тогда-ка я верну своё сообщение:
    Добавлено спустя 44 секунды:
    Или вы данные в этом же цикле вайл используете?
     
  6. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Код (PHP):
    1. if ($result) {
    2.     while($row = mysqli_fetch_assoc($result))
    3.     $mass = $row;
    4. }  
    Я записал в переменную, которая теперь носит массив=)
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    нужно помнить, данные таки перезаписываются.

    Добавлено спустя 36 секунд:
    а вообще зачем так делать? что мешает работать напряму с $row ?
     
  8. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Да, я это уже понял=) код уже правил. Лишнюю переменную убрал, о5тавил только $row=)
     
  9. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Всем привет. Не могу понять как мне вывести данные из массива. Выдает постоянно последнее значение, а мне нужно по порядку. От 1 и до последнего. Помогите, пожалуйста понять. Читал про while, про do while, foreach. Но не получается ими вывести так, как мне нужно.
    Код (PHP):
    1. foreach(select_menu() as $menu)
    2. $lang['menu'] = $menu['name_ru'];
    Выдаст последнее значение.

    select_menu - передаю на другую страницу через инклуд functions.php:
    Код (PHP):
    1. function select_menu(){
    2.     global $db;
    3.     $result = mysqli_query($db, "SELECT * FROM menu") or die("Ошибка" . mysqli_error($db));
    4.     if ($result) {
    5.     while($row = mysqli_fetch_assoc($result))
    6.     $mass[] = $row;
    7. }
    8.     return $mass;
    9. }
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    всё верно выдает. как ты с данными работаешь так оно и работает. машина не виновата что ты не видишь желаемого результата и не можешь подобрать алгоритм решения.
    вот скажи мне, что делает этот ворыч в твоем понимании? что ты хочешь добиться таким алгоритмом?
     
  11. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Как я думаю, он в начале передает данные в переменную $menu и перебирает ее, как массив(т.е. она становится тем массивом, который возвращает функция), когда массив кончается, он выдает последнее полученное значение из него, не?

    Добавлено спустя 3 минуты 40 секунд:
    Я вот так еще делал=)
    Код (PHP):
    1. $key = 0;
    2. foreach(select_menu() as $key=>$menu)
    3. $key++;
    4. $lang['menu'] = $menu[$key]['name_ru'];
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    вынь голову из жопы. это все что хочется сказать про такой код.

    первая строка. объявили переменную кей, записали в нее целочисленный ноль. допустим ок.
    итерируем результат вызова функции селект_меню (тоже ок) как пары ключ+значение, помещая их в переменные кей и меню соответственно. эм. а зачем мы тогда объявляли кей строкой ранее? тут же перезаписывается значение. НУ Ё6АНАР0Т ДОПУСТИМ ОК.
    внимание на конец строки и следующую строку. ок. тело цикла - короткое. догадаешься почему?
    работа в цилке - инкремент значения переменной кей. ок. это той самой которая на каждой итерации получает новое значение. то есть суть цикла - разместить пое6отину в переменной кей и просто сделать инкремент этой пое6отины. никакой смысловой нагрузки похоже нет.
    четвертая и последняя строка. присвоить ключу меню массива содержащегося в переменной ланг значение ключа нейм_ру массива лежащего в ключе, соответствующем значению переменной кей, массива лежащего в переменной меню.

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

    вот такая у тебя программа. продолжай веселиться.
     
  13. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Круто описал, но это очевидно=) ибо это был полный говнокод=)) я не могу разобраться как правильно построить алгоритм для решения данной задачи. Вот в чем проблема.
     
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Потому что его сначала надо написать на русском языке, а потом переписывать на php. Вот ты по-русски напиши, по шагам, чего тебе надо сделать. Но по шагам - а то люди обычно мне на это отвечают одной строчкой... И кстати, очевидно же, почему выдаёт последнее значение в варианте
    Неужели сам не видишь, что ты перезаписываешь каждый раз один и тот же ключ в массиве $lang?
     
  15. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ты не с той стороны зашел в программирование. у тебя уже за каким-то чёртом работа с субд но ты не можешь банально с массивом работать. ты не умеешь работать с примитивными данными. но уже считаешь что стоит заниматься более сложными вещами. поэтому ты и дальше будешь тратить время впустую. и унижаться тут в ожидании халявного решения.

    что в массивах-то? покажешь?
     
  16. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Я не прошу сделать за меня. Я прошу только понять работу с массивами.
    Думаю некоторое я понял, но не все:
    Код (PHP):
    1. foreach(select_menu() as $key=>$menu)
    2. $lang['menu'] = $key->$menu['name_ru'];
     
  17. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    фырзд: итерируем результат вызова функции селект_меню (тоже ок) как пары ключ+значение, помещая их в переменные кей и меню соответственно.
    зигант: присвоить ключу меню массива содержащегося в переменной ланг значение ключа нейм_ру массива лежащего в свойстве меню объекта лежащего в переменной кей.

    я так и знал что ты толль.

    Добавлено спустя 1 минуту 11 секунд:
    почему у меня отрезается исходник из цитируемого сообщения? это что за херня?
     
  18. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Qumo, вы пытаетесь сделать самую смешную нелепость на php? Поскольку человек, хотя бы мельком прочитавший про массивы в php, такую чушь не напишет. Вся работа с массивами: https://php.net/manual/ru/language.types.array.php
     
  19. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Блин, ну вообще никак не доходит до меня. Foreach проходит один раз. Выдает значение, которое было на последней итерации цикла. Что же тогда сделать, чтобы не последнее, а все?
     
  20. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ты просто невнимательный. и мануал не читал еще, да. и ещё не знаешь что хочешь, да. у меня несколько теорий почему ты не обращаешь внимание на содержание моих постов. 1. ты - аутист. 2. ты - тролль. 3. я у тебя в зебре. 4. или её аналоге. 5. ты не умеешь читать на русском.
     
  21. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Я прочитал, ты на время посмотри. Я 6 часов на форуме сижу, и по твоему я не буду что-то читать?!
    По поводу того кода, я понял, что написал полную ахинею. Хорош меня уже всяко разно хаять. И без тебя есть кому настрой портить...
    Кажется "Эврика!"
    Это первый код:
    Код (PHP):
    1. $i=0;
    2. foreach (select_menu() as $i=>$menu[])
    3. $lang[$i]['menu'] = $menu[$i]['name_ru']; 
    А это то место, где у меня выводятся данный из него.
    Код (PHP):
    1. .$lang[$i]['menu']; $i++. 
    Говнокод?
     
  22. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    а можешь чуть более полный фрагмент кода показать?
    и не игнорируй мою просьбу показать содержимое обоих массивов.
     
  23. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Это код языка:
    Код (PHP):
    1. include_once ("admin/db.php");
    2. include ("admin/functions.php");
    3.  
    4. foreach(select_pages() as $array)
    5.  
    6. $lang = array();
    7. $lang['title'] = $array['title_ru'];
    8. //Главное меню
    9. $i=0;
    10. foreach (select_menu() as $i=>$menu[])
    11. $lang[$i]['menu'] = $menu[$i]['name_ru'];
    12. $lang['search'] = "Поиск";
    13. $lang['butup'] = "Наверх";
    14. $lang['butreviews'] = "Оставить отзыв"; 
    Это код, где юзаю. В другом файле.
    Код (PHP):
    1. $i = 0;
    2. while($row = mysqli_fetch_assoc($result)){
    3. echo '<li id='.$row['id'].' class="menu__item"><a href='.$row['url'].' class="menu__link">' .$lang[$i]['menu']; $i++; '</a></li>';
    4. } 
    Добавлено спустя 1 минуту 42 секунды:
    Var_dump:
    Код (PHP):
    1. rray(1) { [0]=> array(4) { ["id"]=> string(1) "1" ["name_ru"]=> string(21) "Лучшие фото" ["name_en"]=> string(11) "Best photos" ["position"]=> string(1) "1" } } array(2) { [0]=> array(4) { ["id"]=> string(1) "1" ["name_ru"]=> string(21) "Лучшие фото" ["name_en"]=> string(11) "Best photos" ["position"]=> string(1) "1" } [1]=> array(4) { ["id"]=> string(1) "2" ["name_ru"]=> string(14) "Галерея" ["name_en"]=> string(7) "Gallery" ["position"]=> string(1) "2" } } array(3) { [0]=> array(4) { ["id"]=> string(1) "1" ["name_ru"]=> string(21) "Лучшие фото" ["name_en"]=> string(11) "Best photos" ["position"]=> string(1) "1" } [1]=> array(4) { ["id"]=> string(1) "2" ["name_ru"]=> string(14) "Галерея" ["name_en"]=> string(7) "Gallery" ["position"]=> string(1) "2" } [2]=> array(4) { ["id"]=> string(1) "3" ["name_ru"]=> string(8) "Цены" ["name_en"]=> string(6) "Prices" ["position"]=> string(1) "3" } } array(4) { [0]=> array(4) { ["id"]=> string(1) "1" ["name_ru"]=> string(21) "Лучшие фото" ["name_en"]=> string(11) "Best photos" ["position"]=> string(1) "1" } [1]=> array(4) { ["id"]=> string(1) "2" ["name_ru"]=> string(14) "Галерея" ["name_en"]=> string(7) "Gallery" ["position"]=> string(1) "2" } [2]=> array(4) { ["id"]=> string(1) "3" ["name_ru"]=> string(8) "Цены" ["name_en"]=> string(6) "Prices" ["position"]=> string(1) "3" } [3]=> array(4) { ["id"]=> string(1) "4" ["name_ru"]=> string(16) "Обучение" ["name_en"]=> string(9) "Education" ["position"]=> string(1) "4" } } array(5) { [0]=> array(4) { ["id"]=> string(1) "1" ["name_ru"]=> string(21) "Лучшие фото" ["name_en"]=> string(11) "Best photos" ["position"]=> string(1) "1" } [1]=> array(4) { ["id"]=> string(1) "2" ["name_ru"]=> string(14) "Галерея" ["name_en"]=> string(7) "Gallery" ["position"]=> string(1) "2" } [2]=> array(4) { ["id"]=> string(1) "3" ["name_ru"]=> string(8) "Цены" ["name_en"]=> string(6) "Prices" ["position"]=> string(1) "3" } [3]=> array(4) { ["id"]=> string(1) "4" ["name_ru"]=> string(16) "Обучение" ["name_en"]=> string(9) "Education" ["position"]=> string(1) "4" } [4]=> array(4) { ["id"]=> string(1) "5" ["name_ru"]=> string(16) "Контакты" ["name_en"]=> string(8) "Contacts" ["position"]=> string(1) "5" } } array(6) { [0]=> array(4) { ["id"]=> string(1) "1" ["name_ru"]=> string(21) "Лучшие фото" ["name_en"]=> string(11) "Best photos" ["position"]=> string(1) "1" } [1]=> array(4) { ["id"]=> string(1) "2" ["name_ru"]=> string(14) "Галерея" ["name_en"]=> string(7) "Gallery" ["position"]=> string(1) "2" } [2]=> array(4) { ["id"]=> string(1) "3" ["name_ru"]=> string(8) "Цены" ["name_en"]=> string(6) "Prices" ["position"]=> string(1) "3" } [3]=> array(4) { ["id"]=> string(1) "4" ["name_ru"]=> string(16) "Обучение" ["name_en"]=> string(9) "Education" ["position"]=> string(1) "4" } [4]=> array(4) { ["id"]=> string(1) "5" ["name_ru"]=> string(16) "Контакты" ["name_en"]=> string(8) "Contacts" ["position"]=> string(1) "5" } [5]=> array(4) { ["id"]=> string(1) "6" ["name_ru"]=> string(20) "Информация" ["name_en"]=> string(11) "Information" ["position"]=> string(1) "6" } } 
     
  24. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    откажись от короткой формы циклов. всегда явно указывай тело.
    сейчас проблема решена судя по коду?
     
  25. Qumo

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

    С нами с:
    6 июн 2013
    Сообщения:
    160
    Симпатии:
    0
    Да, решена, но другая вылезла. Теперь последняя ссылка в меню везде плодится, где только есть a href.

    Добавлено спустя 2 минуты 36 секунд:
    Но это уже походу js делает.

    Добавлено спустя 26 минут 7 секунд:
    Как правильней будет в этой 5троке? Поставить запятую или точку после $lang[$i]['menu']?
    Код (PHP):
    1. echo 'class="menu__link">'.$lang[$i]['menu']. $i++;'</a></li>';