Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Вложил еще один массив, насколько я понял просто в предвидящей задачи сделал просто двойной массив, вложил еще один и заодно разобрался с функцией рандома =)
То что разобрались - хорошо, но что-то у вас тут слишком всё сложно и гораздо больше чем требовалось :)
Я ни разу не против, чтобы вы самостоятельно что-то изучали что-то дополнительно. Наоборот - это круто!
Но давайте в комментариях к заданиям всё же будем писать только то, что требуется, иначе мне будет очень сложно разбираться в каких-то не относящихся к уроку вещах.
Надеюсь на ваше понимание :)
Если правильно понял, смысл домашки был не просто в том что бы создать массив с 3х сложным уровнем вложения, но и добавить потом новый элемент в самый низкий уровень. Вот что получилось:
Fatal error: Uncaught Error: [] operator not supported for strings in /Applications/MAMP/htdocs/uchu_php/arrays.php on line 13
Error: [] operator not supported for strings in /Applications/MAMP/htdocs/uchu_php/arrays.php on line 13
Потому что ...['year'] - уже определен как строка, а ты потом пытаешься применить к нему оператор добавления нового элемента в массив. Выход - изначально хранить в ...['year'] массив с единственным элементом:
В качестве ключей должны быть строки (со скобочками). У вас же PHP пытался найти константы с таким именем, не нашел их, и преобразовал в соответствующие строки. Для этого ему потребовалось время, которое можно было не тратить, укажи вы сразу строки.
У меня вопрос: зачем убирать элементы массива через unset(), или добавлять новые элементы путём кода,если можно просто удалить или добавить элемент вручную прямо в массиве?
$borschtInfo = [1 =>
[ 2 =>
['Свекла' => 'Благодаря свекле борщ обычно темно-красного цвета',
'Лук' => 'А зажарка из лука придает общий вкус для супа',
'Капуста' => 'А купуста это основной ингридиет, который делает борщ борщом'],
],
];
$borschtInfo[1][2]['Картошка'] = 'Тоже необходимый элемент для полноты вкуса';
$borschtInfo[1][2]['Томатная паста'] = 'С пастой обычно делают зажарку для борща';
var_dump($borschtInfo);
Хотел еще спросить как сделать более приятным вывод содержимого массива в браузере (как у вас в видео)? У меня выводит всё в одну строку и сложно разбирать https://prnt.sc/puoyh0
<?php
$siteMenu = [
'Courses' => [
'Html' => 'HTML для начинающих',
'Php' => [
'Lessons' => [
1 => 'Введение в курс по PHP',
2 => 'Как работает PHP',
3 => 'Установка и настройка OpenServer',
4 => 'Установка и настройка PHPStorm'
]
],
'MySql' => 'MySQL с нуля',
'PhpOop' => 'ООП в PHP',
'ProfiPhp' => 'PHP для профи',
'Symphony' => 'Курс по Symfony'
],
'Tests' => [
'Html' => ' Тест по Html',
'Php' => 'Тест по PHP'
]
];
$siteMenu['Courses']['Php']['Lessons'][] = 'Выражения в PHP';
$siteMenu['Courses']['Php']['Lessons'][6] = 'Переменные в PHP';
var_dump($siteMenu);
У меня функция var_dump выводит все в одну строку, нет нормальной структуры, необходимо включить какую то настройку? Временно вышел из положения, использовал xdebug в phpstorm вкладка Variables =)
<?php
echo 'Создайте массив с тремя уровнями вложенности, добавьте новые элементы на этом самом глубоком уровне вложенности.<br>';
//$arra = ['country' => ['Россия' => ['city' => ['Москва' => ['street' => 'Ленина']]]]];
$array = [
'a11' => [
'a21' => [
'a31' => 'Первый элемент третьего массива',
'a32' => 'Второй элемент третьего массива',
'a33' => 'Третий элемент третьего массива'
],
'a22' => 'Второй элемент второго массива',
'a23'=> 'Третий элемент второго массива'
],
'a12' => 'Второй элемент первого массива',
'a13' => 'Третий элемент первого массива'
];
echo $array['a11']['a21']['a31'].'<br>';
$array['a11']['a21']['a34']= 'Четвертый элемент третьего массива';
echo $array['a11']['a21']['a34'].'<br>';
var_dump($array);
Результат:
Создайте массив с тремя уровнями вложенности, добавьте новые элементы на этом самом глубоком уровне вложенности.
Первый элемент третьего массива
Четвертый элемент третьего массива
D:\xampp\htdocs\phpzone\index.php:20:
array (size=3)
'a11' =>
array (size=3)
'a21' =>
array (size=4)
'a31' => string 'Первый элемент третьего массива' (length=59)
'a32' => string 'Второй элемент третьего массива' (length=59)
'a33' => string 'Третий элемент третьего массива' (length=59)
'a34' => string 'Четвертый элемент третьего массива' (length=65)
'a22' => string 'Второй элемент второго массива' (length=57)
'a23' => string 'Третий элемент второго массива' (length=57)
'a12' => string 'Второй элемент первого массива' (length=57)
'a13' => string 'Третий элемент первого массива' (length=57)
Всё хорошо, но в следующих урока достаточно будет следующего решения:
$array = [
'a11' => [
'a21' => [
'a31' => 'Первый элемент третьего массива',
'a32' => 'Второй элемент третьего массива',
'a33' => 'Третий элемент третьего массива'
],
'a22' => 'Второй элемент второго массива',
'a23'=> 'Третий элемент второго массива'
],
'a12' => 'Второй элемент первого массива',
'a13' => 'Третий элемент первого массива'
];
$array['a11']['a21']['a34']= 'Четвертый элемент третьего массива';
только почему то у меня в браузере выводит всё в строку, весь массив, например так:
array(3) { ["title"]=> string(29) "Название статьи" ["text"]=> string(23) "Текст статьи" ["author"]=> string(19) "Имя автора" }
как можно исправить, чтобы было как у тебя??
Строки изменил, но вот с дебагом не получается. Я раскоментировал строки:
integer xdebug.cli_color = 0
integer xdebug.overload_var_dump = 2
integer xdebug.var_display_max_children = 128
integer xdebug.var_display_max_data = 512
integer xdebug.var_display_max_depth = 3
сохранил и перезапустил сервер, но ничего не изменилось, что делаю не так?
$auto= [ //массив с тремя уровнями вложенности
'bmw'=>'x5',
'opel'=> 'corsa',
'audi'=>
['sedan'=>'a4',
'cupe'=>'a5',
'avant'=>[
'benzin'=>'a6'
]]
];
$auto ['audi']['avant']['dizel']='a6tdi'; //добавляем ключ и элемент на третьем уровне
var_dump($auto);
<?php
$arr =[ //Создан массив с тремя уровнями вложенности
'Стажер' => 'Зарплата 100$',
'Опыт работы 1 месяц' => 'Зарплата 200$',
'Опыт работы 2 месяца' => [
'Полный оклад' => 'Зарплата 300$',
'Бонусы' => 'Выполнение плана + 200$'
] //В третьем уровне два ключа с элементами
];
echo $arr['Опыт работы 2 месяца']['Полный оклад'], '<br>', $arr ['Опыт работы 2 месяца']['Бонусы'];
<?php
$salary =[ //Создан массив с тремя уровнями вложенности
'Стажер' => 'Зарплата 100$',
'Опыт работы 1 месяц' => 'Зарплата 200$',
'Опыт работы 2 месяца' => [
'Полный оклад' =>'Зарплата 300$',
'Бонусы' => [
'Выполнение плана' => '200$',
'Мобильная связь'=>'',
]
]
]; //В третьем уровне четыре ключа с элементами
echo $salary['Опыт работы 2 месяца']['Бонусы']['Мобильная связь']= 'За счет компании';
var_dump($salary);
А так норм?
Извините, РНР 7.3.3 у меня тоже ругается на квадратные скобки. В мануале РНР по Вашей ссылке тоже пишут синтаксис (). https://www.php.net/manual/ru/language.types.array.php
Как все-таки сейчас правильно? Или у меня все же РНР неправильно настроен?
firstName
name
Warning: foreach() argument must be of type array|object, string given in G:\Programs\OpenServer\domains\localhost\myproject.loc\www\LearnPHP\index.php on line 33
nick
Warning: foreach() argument must be of type array|object, string given in G:\Programs\OpenServer\domains\localhost\myproject.loc\www\LearnPHP\index.php on line 33
secretedName
Warning: Array to string conversion in G:\Programs\OpenServer\domains\localhost\myproject.loc\www\LearnPHP\index.php on line 32
SecNam : Antonio
fullName
Warning: foreach() argument must be of type array|object, string given in G:\Programs\OpenServer\domains\localhost\myproject.loc\www\LearnPHP\index.php on line 33
lastName
Warning: foreach() argument must be of type array|object, string given in G:\Programs\OpenServer\domains\localhost\myproject.loc\www\LearnPHP\index.php on line 31
age
Warning: foreach() argument must be of type array|object, int given in G:\Programs\OpenServer\domains\localhost\myproject.loc\www\LearnPHP\index.php on line 31
Вопрос. Почему вывод есть + ошибки, что они значат? Я переводил переводчиком, но не понял...
Всё хорошо тут, норм)
А зачем вы цифры обернули в кавычки? И начинайте нумерацию всегда с нуля.
Вместо array() нужно использовать [].
Инициализация массива через [] не работает, ошибку выдает.
Пришлите ваш код, в котором возникает ошибка, посмотрю что не так.
Parse error: syntax error, unexpected '[' in Z:\home\test.org\www\index.php on line 2
Разобрались, была старая версия PHP - 5.2.
tested!
test test!
И так тоже можно)
Как-то так)
Вложил еще один массив, насколько я понял просто в предвидящей задачи сделал просто двойной массив, вложил еще один и заодно разобрался с функцией рандома =)
То что разобрались - хорошо, но что-то у вас тут слишком всё сложно и гораздо больше чем требовалось :)
Я ни разу не против, чтобы вы самостоятельно что-то изучали что-то дополнительно. Наоборот - это круто!
Но давайте в комментариях к заданиям всё же будем писать только то, что требуется, иначе мне будет очень сложно разбираться в каких-то не относящихся к уроку вещах.
Надеюсь на ваше понимание :)
А теперь добавьте в уже созданный массив новый элемент, на третьем уровне вложенности.
Видимо, я как-то не так объяснил, что нужно. Я ожидал следующего:
Так правильно?
В задании подразумевается, что будут новые элементы будут добавлены уже после того, как массив был создан.
Как добавить теперь в уже готовый массив вот на этот уровень:
ещё один элемент, чтобы в результате стало вот так:
Благодарствую за урок.
Отличная домашка! =)
Спасибо!) Стараюсь :)
Если правильно понял, смысл домашки был не просто в том что бы создать массив с 3х сложным уровнем вложения, но и добавить потом новый элемент в самый низкий уровень. Вот что получилось:
Да, всё правильно!
Мой лист покупок)
Отлично!
Зачем назначать ключи? Можно просто сделать так:
Отлично!
Отлично
А я правильно сделал?
Попытался сейчас в year оставить только 1989, а следом текст добавить как отдельный элемент. Добавил код отдельно:
Но не правильно что-то, выдает ошибку в браузере:
Потому что ...['year'] - уже определен как строка, а ты потом пытаешься применить к нему оператор добавления нового элемента в массив. Выход - изначально хранить в ...['year'] массив с единственным элементом:
Аа..точно надо было так
Сразу и имя задал новому массиву, а то сначала так сделал:
И новому массиву "0" присвоился. Теперь понял.
Я просто в самый первый раз пытался добавить новый массив сразу к существующему ['year'] думал получится))
Ага, можно так
Отлично
Пока решил оставить функции с рекурсиями на потом пошёл читать дальше)
Правильно ли я понял задание с массивами
Да, верно
Ок!
Вроде все сделал, с добавлением переменной что-то не пойму, делал вечером голова уже не варит.
Суть задания - добавить теперь на одном уровне с name и genres еще один элемент.
Ок)
Спасибо за курсы, ты молодец! Очень интересно )
Рад слышать) По домашке - всё отлично.
Отлично!
Отлично!
Я сделал так
И не пойму, почему var_dump выводит на экран вот так:
Почему взамен, чтобы вывести
он выводит "..."?
В настройках есть пункт про глубину вложенности при выводе через var_dump. Погуглите (на английском только гуглите).
В качестве ключей должны быть строки (со скобочками). У вас же PHP пытался найти константы с таким именем, не нашел их, и преобразовал в соответствующие строки. Для этого ему потребовалось время, которое можно было не тратить, укажи вы сразу строки.
Спасибо.
Ок. Индекс при добавлении можно не указывать:
Ок
Отлично
После создания массива нужно ещё добавить элемент на третьем уровне вложенности. Как будете это делать?
Так?
Только я не понял как добавить элемент массива на 3 уровень?
up кажется понял - так?
Посмотрите решения выше
Отлично!
Код:
После создания массива нужно добавить элемент на самом глубоком уровне вложенности.
Код:
Должно быть ещё одно действие после создания массива...
В задании после создания массива нужно было добавить запись на самом глубоком уровне вложенности. Вы добавили на самом первом уровне.
Хорошо
У меня вопрос: зачем убирать элементы массива через unset(), или добавлять новые элементы путём кода,если можно просто удалить или добавить элемент вручную прямо в массиве?
Что значит вручную?
Ну, просто взять, и стереть с помощью клавиши на клавиатуре
Потому что программы изменяют массивы)
Отлично
Отлично
Зачем в одну строку всё? Ничего непонятно
Задание не выполнено. Надо добавить элемент уже после создания массива.
Скобки прыгают. На каком уровне открываете, на том и закрывайте. А то открыли на одной строке, затем 2 переноса, и следом закрывающая.
А где добавление элемента после создания массива?
Поправил
Отлично
как то так.
Пропустили ключ cats
А где добавление элемента после создания массива?
Добавил)
Отлично)
А где добавление элемента после создания массива?
$basket[food][fruits][]
Так нельзя, будут ошибки. Должны быть строки, в кавычках.
Доброе утро, так array_push($basket["food"]["fruits"], 'cherries', 'pear'); или вот так array_push($basket['food']['fruits'], 'cherries', 'pear');?
Зачем функции? В первом варианте всё было ок, кроме того, что ключи должны быть строками.
array.php
Пример использования
Title и info добавятся как 2 разных фильма. Сделай так, чтобы добавлялись в один.
Да да) Я уже вчера переписал код. Самому не понравилось, когда пробовал удалить фильм х) Переписал код немного иначе + жанр взял как элемент фильма.
Так лучше?
Отлично :)
Отлично
я так сделал:
А где добавление элемента после создания массива?
Всё хорошо, только пробелы не нужны вот тут:
Понял. Спасибо!)
Результат:
array (size=1)
'admin' =>
array (size=3)
'first name' => string 'Денис' (length=10)
'last name' => string 'Денисов' (length=14)
'personal data' =>
array (size=4)
'phone' => string '+79612987650' (length=12)
'email' => string '[email protected]' (length=15)
'age' => string '23' (length=2)
'gender' => string 'man' (length=3)
Имя: Денис
Фамилия: Денисов
Телефон: +79612987650
Пол: man
Отлично
Падает с ошибкой
А зачем всё перелопатили? Исправьте конкретную ошибку, из-за которой падало.
исправил
Что исправили? Код нерабочий! Вот я его копирую, запускаю, и у меня ошибка. Вы его даже не запускали у себя. Не надо так.
var_dump меня подвел вместо var - war так все работает
Никто вас не подводил. Проверяйте код перед отправкой на проверку.
А где добавление элемента после создания?
Отлично
А где добавление элемента после создания?
Прошу прощения) забыл
Отлично
Инициалы Фамилия
Какой то Текст
А где добавление элемента после создания?
Какое добавление элемента?
Перечитайте ДЗ. Посмотрите другие решения, если не получится сделать самостоятельно.
Отлично
Хотел еще спросить как сделать более приятным вывод содержимого массива в браузере (как у вас в видео)? У меня выводит всё в одну строку и сложно разбирать https://prnt.sc/puoyh0
Для этого нужно было включить xdebug. Урок про отладку пропустил?
нет, отладка включена
А где добавление элемента после создания?
вот 'name' => [
'middle_name' => 'Ivanovich'
]
вот это разве не третьи уровень?
Нужно сделать это отдельным действием. Используя переменную с уже созданным массивом.
Именно
исправил
А где добавление элемента после создания?
исправил))
Отлично
как подключить PHP_CodeSniffer в php_storm для windwos ?
Через плагин.
Отлично
А где добавление элемента после создания?
У меня функция var_dump выводит все в одну строку, нет нормальной структуры, необходимо включить какую то настройку? Временно вышел из положения, использовал xdebug в phpstorm вкладка Variables =)
Это включается одной из опций xdebug в конфигурации php.ini. Попробуйте найти самостоятельно.
А где добавление элемента после создания?
Отлично
У меня вот так:
Отлично
Что за пробелы? В уроке такого не давалось.
Поправил. Спасибо
После $article тоже не нужен)
Сделал)
Теперь отлично
Артем, а литературу по PHP можно начинать читать? Или к примеру Совершенный код, грокаем алгоритмы? Не повредит усвоению курса? Заранее благодарен!
Пока рановато. После прохождения курса для начинающих можно начинать "грокаем алгоритмы". Совершенный код сам не осилил до сих пор)
А где добавление элемента после создания?
И что-то всё пляшет, используйте форматирование как в уроке.
Всё обновил)
Если конечно я так понял... :/
Нет, надо было перенести на разные строки, но сделать это правильно.
Закрывающий тег ?> не нужен. Самостоятельно найдите информацию почему его не нужно ставить.
И второй раз спрашиваю - где добавление элемента после создания? =) Это часть домашнего задания.
Что-то такое
А где добавление элемента после создания?
И почему форматирование как попало? Нужно выровнять, чтобы по-красоте было.
А где добавление элемента после создания?
Почему двойные кавычки вместо одинарных?
Отлично
А где добавление элемента после создания?
А где добавление элемента после создания?
Закрывающий тег не нужен!
Правильно. Не забывайте оформлять код с помощью специальной кнопки
Это первая кнопка? И как оформить предыдущий скрипт?
Да, первая. Рядом с комментарием значок карандаша.
Если хотите в переменной несколько статей хранить, то и назвать её стоит articles. В остальном - отличная домашка.
Результат:
Отлично
Результат:
Создайте массив с тремя уровнями вложенности, добавьте новые элементы на этом самом глубоком уровне вложенности.
Первый элемент третьего массива
Четвертый элемент третьего массива
D:\xampp\htdocs\phpzone\index.php:20:
array (size=3)
'a11' =>
array (size=3)
'a21' =>
array (size=4)
'a31' => string 'Первый элемент третьего массива' (length=59)
'a32' => string 'Второй элемент третьего массива' (length=59)
'a33' => string 'Третий элемент третьего массива' (length=59)
'a34' => string 'Четвертый элемент третьего массива' (length=65)
'a22' => string 'Второй элемент второго массива' (length=57)
'a23' => string 'Третий элемент второго массива' (length=57)
'a12' => string 'Второй элемент первого массива' (length=57)
'a13' => string 'Третий элемент первого массива' (length=57)
Всё хорошо, но в следующих урока достаточно будет следующего решения:
Не нужно усложнять
Отлично
только почему то у меня в браузере выводит всё в строку, весь массив, например так:
array(3) { ["title"]=> string(29) "Название статьи" ["text"]=> string(23) "Текст статьи" ["author"]=> string(19) "Имя автора" }
как можно исправить, чтобы было как у тебя??
Для строк нужно использовать одинарные кавычки!
https://xdebug.org/docs/display
Строки изменил, но вот с дебагом не получается. Я раскоментировал строки:
integer xdebug.cli_color = 0
integer xdebug.overload_var_dump = 2
integer xdebug.var_display_max_children = 128
integer xdebug.var_display_max_data = 512
integer xdebug.var_display_max_depth = 3
сохранил и перезапустил сервер, но ничего не изменилось, что делаю не так?
Напиши в чате в телеграме, там подскажут) Тут можно долго провозиться
Отлично
Отлично
А где второй пункт домашки?
А для чего echo сразу?
А где второй пункт домашки? Тоже на него всё свалите? =)
Никак не могу разобраться, почему после вызова var_dump в браузере не отображаются элементы на 4-ом уровне вложенности.
А вот в HTML все выводится.
В php.ini можно задать глубину вложенности, выводимую var_dump
По домашке всё ок
Добрый день. Мой пример.
Отлично
Решил запилить табличку))
Ок, но в следующий раз не стоит) Лучше выполните второй пункт домашки
Ну вроде как-то так
Отлично
Отлично
Отлично
Пробел лишний.
В чем смысл этой строки?
Не выполнен второй пункт ДЗ.
Отлично
Благодарю вас за урок, вы очень благое дело делаете!)
Второй пункт домашки не выполнен
Так, ну вот добавил новый элемент вложенности на последнем уровне. Всё сработало у меня, в браузере отобразилось)
Отлично
Отлично
Привет! вот мой вариант
Закрывающий тег ?> в конце файла не нужен.
В остальном - отлично
Отлично
Норм
Второй пункт ДЗ не выполнен
То есть нужно было записать новые элементы на самый глубокий уровень вложенности?
Да
вот так вот наверно будет
Отлично!
Закрывающий тег ?> в конце файла не нужен. В остальном отлично.
array(2) { [1]=> array(1) { ["Тургенев"]=> array(3) { [0]=> string(8) "Муму" [1]=> string(20) "Отцы и дети" [2]=> string(6) "Ася" } } [2]=> array(1) { ["Пушкин"]=> array(3) { [0]=> string(30) "Руслан и Людмила" [1]=> string(10) "Садко" [2]=> string(18) "Лукоморье" } } }
Отлично
Должно быть верно, возможно.
Отлично!
Вроде справился с заданием)
Отлично
Добрый день!
В этом массиве сделана попытка представления хранения данных о фильмах.
Результат:
Служебный роман
Режисер фильма Эльдар Рязанов
Исполнитель главной роли Алиса Фрейндлих
Отлично
Здравствуйте.
Извините, РНР 7.3.3 у меня тоже ругается на квадратные скобки. В мануале РНР по Вашей ссылке тоже пишут синтаксис (). https://www.php.net/manual/ru/language.types.array.php
Как все-таки сейчас правильно? Или у меня все же РНР неправильно настроен?
Привет. Что значит ругается? Приведите пример ошибки.
Отлично
Получилось так.
Код
Результат:
Единственный момент, почему-то у меня в строку все выводится.
array(3) { ["address"]=> string(10) "адрес" ["hozyjn"]=> string(10) "Роман" ["pets"]=> array(1) { ["cat"]=> array(2) { ["name"]=> string(5) "Tigra" ["name2"]=> string(5) "Baton" } } }
Отлично
https://php.zone/post/krasivyy-vyvod-var-dump-openserver
Закрывающий тег ?> в конце файла не нужен.
Всё отлично, но проблема с форматированием. Сделайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
Принято спасибо:)
Отлично!
лишний пробел
Отлично
Не выполнен второй пункт дз
Теперь ок
Как я понял у var_dump стоит ограничение на вывод символов, нашёл вот такие настройки
но чтоже их теперь прописывать в каждом скрипте чтобы увидеть полный вывод?
Нашёл что можно эти настройки поместить в файл php.ini, но не будут ли они конфликтовать там с чем нибудь?
Именно там их и надо менять
Хотел спросить!
Вот код:
Вот вывод:
Вопрос. Почему вывод есть + ошибки, что они значат? Я переводил переводчиком, но не понял...
Потому что в foreach передается строка Tkachenko и число 19. И еще строки Anton и Tony. Нужно проверять что значение итерируемое.
Отлично!
Примерно так: