«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2018/06/07 04:56:58  №1204435 1
Платина. Призываю к совету анонов, желательно с картофляндии. Окончил вышку(программист) и работаю на принудительной галере(недопрограммист на некроязыке) - осталось чуть больше года отсидеть. Понимание программирования немного есть, но навыки отсюда вряд ли пригодятся, может только sql немного. В универе пытался вкатиться, процентов 40 кантора освоил и немного пхп с вёрсткой поковырял. Свободного времени тут относительно много, поэтому планирую выучить за это время что-нибудь адекватное. Читаю уже много времени и ваши треды, и треды фронтендеров и не могу разобраться, куда двигаться, чтобы через полтора года не обосраться, одно только понял, что кроме веба за полтора года ничего не успею освоить на уровне джуна, смотрю ещё на питона немного, дайте совет. Пишу сюда, потому что в фронттреде мало адекватов и вопросов по делу, у вас хорошая атмосфера и вроде как все делом занимаетесь.
Ответы: >>1204454 >>1204483
Аноним 2018/06/07 06:44:17  №1204462 2
Поясните за функции работы с массивами, а если точнее за параметры этих функций. По какой логике они выстроены?
Вот, например, функция array_keys возвращает массив ключей, да? Первым параметром она принимает массив, а вторым значение, ключи которого(ых), нужно найти.
Тут где-то неподалёку есть функция array_search, которая возвращает первый ключ искомого значения. Но тут она уже первым параметром принимает значение, а вторым - массив.

Казалось бы, две похожие функции, но почему порядок параметров разный? Почему нельзя было все функции этого типа стандартизировать, чтобы, например, везде сначала шёл массив, а затем уже значение?
Почему везде всё по-разному?
Это я чего-то не понимаю, или это просто разработчики php не могут в согласованную работу? В чём сакральный смысл такого поведения?
И это ведь не единственный пример, есть куча функций, которые ищут что-то в чём-то и порядок параметров всегда хаотичный, не подчиняющийся логике.

А это порой жутко неудобно бывает.
Ответы: >>1204470 >>1204481 >>1204488
Аноним 2018/06/07 07:19:07  №1204481 3
>>1204462
Необязательные параметры идут в конце.
>Если указан необязательный параметр значение_для_поиска, функция возвращает только ключи, совпадающие с этим параметром. В обратном случае, функция возвращает все ключи массива исходный_массив.
Ответы: >>1204484
Аноним 2018/06/07 07:23:30  №1204483 4
>>1204435
>Окончил вышку(программист)
>и работаю на принудительной галере
>Понимание программирования немного есть
>кроме веба за полтора года ничего не успею освоить на уровне джуна
Ты дно, пили сюда свои проекты.
Ответы: >>1204502
Аноним 2018/06/07 07:24:48  №1204484 5
>>1204481
Ну тогда всё встаёт на свои места, спасибо.
Ответы: >>1204489
Аноним 2018/06/07 07:31:33  №1204489 6
>>1204484
Хотя, с другой стороны. В любом случае, функции для строк и для массивов имеют разный порядок аргументов.
Для строк сначала идёт haystack, а потом needle (как например в strpos), для массивов наоборот. Хотя оба аргумента обязательные.
Ну и названия методов тоже. array_search vs. strpos. Нелогично? Нелогично!

Я просто ньюфаня, и меня это немного путает (и пугает).
Ответы: >>1204538
Аноним 2018/06/07 07:42:55  №1204502 7
Ответы: >>1204538
Аноним 2018/06/07 09:01:03  №1204538 8
>>1204502
Плохова ответ!

>>1204489
Первым аргументом идет то что должно выдаться.
array_keys выдает массив.
array_search только первый ключ.
strpos позицию в строке.(Потому первая строка, а не искомый ключ)
>Нелогично?

Я сам нью, только позавчера начал основы читать.
Ответы: >>1204550 >>1204551
Аноним 2018/06/07 09:18:59  №1204551 9
>>1204538
Ну давай разберем по частям, тобою написанное ))

>Первым аргументом идет то что должно выдаться.
Смотрим:
array_search Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае удачи (c php.net)
То есть што делает эта функция? Ищет в массиве искомое значение и возвращает первую позицию его. Да?

Теперь дальше:
strpos Возвращает позицию первого вхождения подстроки

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

Я так и не понял, что ты имел ввиду под
>Первым аргументом идет то что должно выдаться.

И в первой, и во второй функции возвращается int, который характеризует позицию первого найденного значения.

>Первым аргументом идет то что должно выдаться
>array_search только первый ключ
Мы ожидаем от функции индекс первого найденного элемента, поэтому первым аргументом передаём элемент, а вторым массив? Звучит логично.

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

>Первым аргументом идет то что должно выдаться
>strpos позицию в строке
Мы ожидаем от функции индекс первой найденной последовательности, поэтому первым аргументом передаем массив, в котором осуществляется поиск, а вторым уже искомый набор элементом.

>Нелогично?
Ответы: >>1204614
Аноним 2018/06/07 10:20:02  №1204614 10
>>1204551
>Мы ожидаем от функции индекс первой найденной последовательности, поэтому первым аргументом передаем массив, в котором осуществляется поиск, а вторым уже искомый набор элементом.
Не массив а строку!
Получаем позицию в строке. Но не подстроку, которую ищем.



array_search пользуемся для работы с искомым значением.
(И конечно же для работы с массивом т.к. значение вложенное в него, но прежде всего со значением)
strpos пользуемся для работы со строкой в которой находится последовательность.
(Прост работаем относительно последовательности)

>Нелогично?
Ответы: >>1204672
Аноним 2018/06/07 11:15:38  №1204672 11
>>1204614
>Не массив а строку!
Так ведь строка это и есть массив!
Строка - последовательность символов, массив - последовательность каких-то других данных.
В каком-нибудь C это вообще буквально так и есть.

И первая, и вторая функция используется для поиска значения в последовательности.
И первая, и вторая функция возвращает индекс первого найденного элемента по нашему запросу.

Будь это элемент в массиве или подстрока, какая разница? И там и там возвращается одно и то же.
Чем принципиально отличается индекс массива и позиция в строке? Это такое же число, равное отступу от начала этой последовательности.

Какая разница для чего нам нужна эта функция, если возвращаемое значение и там, и там несет в себе один смысл?

Окей, вот у нас есть строка мышь.
Мы пытаемся найти в ней "ш".

И спрашиваем, какой отступ у символа "ш" в последовательности символов мышь, относительно начала последовательности?
Получаем ответ - 2.

Теперь у нас есть массив ["м", "ы", "ш", "ь"].
Мы пытаемся найти в нём "ш".

И спрашиваем, какой отступ у элемента типа "строка" "ш" в последовательности элементов типа "строка" "м", "ы", "ш", "ь", относительно начала последовательности?
Получаем ответ - 2.

В чём принципиальная разница, которая бы отличала первую функцию от второй настолько, чтобы она стала достойна смены порядка аргументов?

Мы ищем что-то в чём-то. Ищем что-то в какой-то последовательности. Ищем позицию элемента какого-то типа в последовательности, состоящей из элементов данного типа.
Ну а потом, для чего нам может понадобиться узнать позицию последовательности в строке? Ну, например, для того, чтобы убедиться, что она там вообще есть, ну провести какие-то манипуляции с последовательностью.
Но и с массивом то же самое! Мы можем использовать функцию array_search как для того, чтобы убедиться, что массив есть, ну или чтобы провести какие-то манипуляции с этим элементом, т.е. по сути тоже с последовательностью, только состоящей из одного элемента (да и к тому же ничто не мешает использовать функцию для поиска некоего диапазона, чтобы потом работать с ним).

Может быть, я слишком глупый, но я этого не понимаю.
Ответы: >>1204682 >>1204740 >>1204758
Аноним 2018/06/07 11:25:44  №1204682 12
>>1204672
В итоге ты ищешь значение не само в себе, а для работы с чем-то.

Ты ищешь ключ значения в массиве для работы со значением.
Ты ищешь позицию в строке для работы со строкой.
Ответы: >>1204690
Аноним 2018/06/07 11:34:55  №1204690 13
>>1204682
>Ты ищешь ключ значения в массиве для работы со значением.

Я ищу номер значения, чтобы удалить его из последовательности, например.

unset($misch[array_search("ш", $misch)]);
substr_replace($misch, "", strpos($misch, "ш"), 1);

Конечно, это костыль, т.к. можно было использовать str_replace. Но я уверен, что внутри она так и работает.

И в первом и втором случае меня волнует только позиция значения для того, чтобы удалить её их последовательности. Ничего больше меня не волнует.
Ответы: >>1204692 >>1204706
Аноним 2018/06/07 11:36:13  №1204692 14
>>1204690
Ну, вместо unset лучше использовать array_splice, но суть это не меняет.