Сервис прокачки PHP скиллов

Как вам сервис?

  • Отлично!

  • Ничего нового не нашел.

  • А поработайте с дизайном.

  • Ну просто убого.


Результаты будут видны только после голосования.

grigori

( ͡° ͜ʖ ͡°)
Команда форума
про оператор сложения массивов, в отличие от array_merge, я случайно узнал месяц назад, когда в чужом коде увидел оператор +

за 15 лет сложение массивов мне не было нужно ни разу - не представляю логику, где нужна потеря значений из 2го операнда при совпадении числовых ключей

PHP:
gri@USER-PK:~$ php -r "var_export(["a"=>1,2]+[3,"b"=>4,"a"=>5]);"
array (
  'a' => 1,
  0 => 2,
  'b' => 4,
)
 
Последнее редактирование:

Andreika

"PHP for nubies" reader
потеря значений может и не нужна, а вот значения по умолчанию нужны.. для ассоциативных массивов точно, а может быть даже и для числовых ключей
PHP:
var_export([2 => 10, 30, 5 => 50] + array_fill(0, 20, 0));
 

Вурдалак

Продвинутый новичок
Я этот оператор не использую, поскольку он малоизвестен, необычен порядком аргументов и непривычно работает с числовыми индексами. Что заставит при чтении кода остановить взгляд и потратить время.

array_merge() же вопросов не вызовет. Если мне по какой-то причине понадобится логика «+» с числовыми индексами, то я бы так и быть, заюзал бы «+», снабдив это комментарием, но я не помню такого случая на моей практике.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
дефолтные значения нужны только при валидации, а для валидации намного лучше filter_var_array() - и тип проверит, и значение, и null выставит

если, вдруг, у числовых ключей есть смысл - это значит, что код очень кривой, сишники иногда так дурят, ломается это очень часто и чинится с большим трудом
 
Последнее редактирование:

MiksIr

miksir@home:~$
Прекрасно делается и через array_merge. И порядок массивов более очевиден - сначала дефолтные значения (прототип), потом расширение с пришедшими данными.
Реально разница между + и array_merge в поведении, когда массивы с числовыми индексами.
если, вдруг, у числовых ключей есть смысл - это значит, что код очень кривой, сишники иногда так дурят, ломается это очень часто и чинится с большим трудом
Вот, имхо, одна из ошибок php в погоне за "упрощением" перла - смешанный тип. Массив + хеш отдельно был бы приятнее.
 

Andreika

"PHP for nubies" reader
дефолтные значения нужны только при валидации
какая валидация? там то оно зачем?

PHP:
new MyMySQL( $params + [ 'port' => 3306, 'host' => 'localhost', 'user' => 'root', 'password' => '' ]);

$this->getExpectedDatesAtLocations() + $this->getDefaultDatesAtLocations()
если, вдруг, у числовых ключей есть смысл - это значит, что код очень кривой
ну действительно, использовать ключ => значение, где ключ это, например, id из базы явная кривизна кода. лучше нужное значение для соответствующего id искать перебором массива объектов.
да и вообще, надо в 7.2 в foreach( $arr as $key => $value) встроить проверку, что ключ - "не число"... любители чисел пусть for используют.

И порядок массивов более очевиден - сначала дефолтные значения
Опять же - кому очевиден? Есть какие-то правила очевидности?
Такое очучение, что страница "операции с массивами" помечена как "здесь не читай, иди сразу в список array_* - там все есть. но там есть array_push, ты его тоже не читай"
 

MiksIr

miksir@home:~$
Опять же - кому очевиден?
Ну если судить по этой теме - очевиден сильным программистам и не очевиден - программистом уровнем слабее.
ну действительно, использовать ключ => значение, где ключ это, например, id из базы
Такое действительно может быть. Но случаи, когда у нас не просто такие ключи, но еще и нужно этот массив с чем-то объединять - исчезающи малы. Вообще не помню ни одного такого случая. Единственное, что приходит в голову - это аналог UNION, но именно в этом случае + вреден, а нужно использовать array_merge (ибо числовые индексы ака id из разных таблиц).
 

Andreika

"PHP for nubies" reader
Ну если судить по этой теме - очевиден сильным программистам и не очевиден - программистом уровнем слабее.
в смысле, ты тест прошел? и че, сколько баллов набрал? достаточно силен?

Но случаи, когда у нас не просто такие ключи, но еще и нужно этот массив с чем-то объединять - исчезающи малы.
Допустим, что малы. Но дальше логическая цепочка теряется. если оно исчезающе мало, но вдруг случилось и понадобилось, то что?

У тебя есть список магазинов с ид, названием, статусом и склад.
Из одного источника (функции) ты получаешь в любом удобном тебе виде (ключ=>значение, массив массивов или stdClass из базы, массив сущностей/VO/DTO/...) дату, когда товар N могут доставить со склада на магазин.
Из другого - удобные тебе данные о том, на какие магазины товар уже доставляется на данный момент.
Нужно вернуть дату поступления по указанному магазину (скорее всего там по очереди передадут все активные магазины, чтобы табличку вывести. но это не точно). Что делать будем?
В принципе, можно и без + обойтись запросто, но можно и не обходиться.
 

MiksIr

miksir@home:~$

Вурдалак

Продвинутый новичок
Хорошая тема для конференции: + vs array_merge, как мы мигрировали с одного на другое, плюсы/минусы, факапы, производительность. С графиками там, смешными картинками. Злободневная тема.
 

Andreika

"PHP for nubies" reader
Хорошая тема для конференции: + vs array_merge
"or/and вместо || &&: тайный смсыл или совместимость с SQL?", "офисный быт: третье равно подряд не опечатка, а повод менять залипающую клавиатуру"

В смысле, даже и в голову не пришло проходить его.
ясно. значит ты открыток к 23 февраля перечитал.

Уж явно не решать "плюс или не плюс"
если решать не в смысле "собирать совещание с тимлидом и руководством", то почему бы и не решить?
описанная задачка вроде простая, ты скорее всего бы ты бы даже не задумываясь, на автомате написал бы правильный код. тем более, что правильность и не нужна тут особо, больше интересна идея (не обязательно "гениальная". то, что можно написать сие десятком способов и так очевидно - интересует, какой ты выберешь).
 

MiksIr

miksir@home:~$
если решать не в смысле "собирать совещание с тимлидом и руководством", то почему бы и не решить?
Потому что глубоко посрать, как будет задача решена - плюсом, мержем, или если человек не знает про плюс - циклом. Это вообще не показатель уровня программиста. Мерять это - показатель задротства и ЧСВ. И меня совершенно не интересует, что программист выберет. И уж тем более не придет в голову спрашивать это на собеседовании.
 

Andreika

"PHP for nubies" reader
ну как это глубоко посрать? вдруг кто такое на собеседовании напишет/покажет, а там же ж порядок массивов "не правильный" и вообще все Прекрасно делается и через array_merge.
 

nefone

Новичок
Идея хорошая. А то как то мало годного контента для изучения PHP
 
Сверху