@phpgeeks

Страница 219 из 8430
[Anonymous]
21.06.2016
16:57:38
типр гуру по пхп?

Gleb
21.06.2016
16:57:40
первый - на выборку с одним джойном и групбаем с having. Выбрать все фоточки, у которых больше 5 комментариев.

Dmitriy
21.06.2016
16:57:41
ну, у меня всего два вопроса на собеседованиях. На SQL и на логику.)
Что значит на логику? На науку логику, на логическое мышление или на алгоритмизацию?

чойта джун?
от Джуниор - Junior - младший

Google
Alex
21.06.2016
16:58:10
Ребята, #вопрос: Пытаюсь на сервере выполнить слияние двух директорий, проще говоря. Объеденить две одинковых по структуре папки. Одну скопировать в другую. Получаю ошибку 550

Я не собираюсь "переименовывать". Просто хочу вложить одну в другую.

Вырезать/вставить/переместить

[Anonymous]
21.06.2016
16:59:14
от Джуниор - Junior - младший
ясно ясно. спасибо

Gleb
21.06.2016
17:00:17
второй: Есть некий $template = "Hello, {{$user}}! Your balance: {{balance}}, today is {{dayofweek}}"; Есть строка $vars = ["user" => "John", "balance"=>"100$", "dayofweek"=>"Friday"]; Надо в первой строке для любого количества шаблонов заменить их на значения из массива по ключу. Ну, чтобы пользователю на почту ушло персонифицированное письмо, предположим.

из 20 приходивших на собеседование с задачей не справился особо никто. Думал, что дурной сам и задача нетривиальная, провел опрос среди сотрудников, вроде все решили. В общем, грустно мне :с

Gleb
21.06.2016
17:03:47
тут есть несколько уровней просто, чем задача крутая. Первый уровень — просто решить, второй – решить её так, чтобы в строке потом не осталось {{varname}}, для которых не нашлось ключа (и вообще понять, что так можно), и третий уровень, который уже не особо нужен по работе, но интересен — что если наша строка весит пару гигов, и мы имеем миллион пользователей, которым надо её отправить?)

(;¬_¬)
21.06.2016
17:04:25
$template = str_replace(array_keys($vars),array_values($vars),$template) ?

Gleb
21.06.2016
17:04:32
второй, кстати, еще и быстрее работать будет, насколько понимаю.

Ilyas
21.06.2016
17:04:34
причем тут фш и бэкенд)

Gleb
21.06.2016
17:04:53
(;¬_¬)
21.06.2016
17:05:00
^_________^

Google
(;¬_¬)
21.06.2016
17:05:05
кекеке

второй разбираем vars foreach($vars as $key $value) а потом убираем preg_replace все оставшиеся бяки

но так на вскидку не накатаю =)

потому что синтаксис preg_replace надо палить в мануале ^___^

Gleb
21.06.2016
17:05:59
ну, регулярки не спрашиваю, сам не знаю.

(;¬_¬)
21.06.2016
17:06:51
а третий случай... ну можно тредами распараллеливать...

Gleb
21.06.2016
17:07:00
второй разбираем vars foreach($vars as $key $value) а потом убираем preg_replace все оставшиеся бяки
http://php.net/manual/ru/function.preg-replace-callback.php или что-нибудь подобное, чтобы по строке второй раз не бежать.

(;¬_¬)
21.06.2016
17:07:01
Ой, зачем.
ну это первое что приходит в голову в конце рабочего дня

я прошел? вы возьмете меня джуном на 60к по удаленке? ?

Gleb
21.06.2016
17:07:33
ну или банальный preg_match и по массиву совпадений потом пройтись, да.

боль
21.06.2016
17:07:33
ну это первое что приходит в голову в конце рабочего дня
Можно же при переборе массива проверять наличие значения

(;¬_¬)
21.06.2016
17:07:34
???

а если я не знаю что у меня в строке должно быть и что у меня в массиве есть?

Gleb
21.06.2016
17:07:59
с удаленкой сложно — у нас было два сотрудника, не понравилось)

(;¬_¬)
21.06.2016
17:08:07
т.е. темплетй который написали, а переменной только юзер и дейттайм

тогда я не знаю что там выпиливать из строки и надо выпиливать именно по {{}}

с удаленкой сложно — у нас было два сотрудника, не понравилось)
^___^ вопрос был на интерес =) просто совесть не позволит бросить текущую работу в том состоянии, в котором она сейчас

Dmitriy
21.06.2016
17:10:17
http://sandbox.onlinephpfunctions.com/code/e9471bd6a367637463fbe638b4a2b421e23982fc

Gleb
21.06.2016
17:10:18
тебе прег_матч по строке и вернет всё, что в ней встречается в виде шаблона (если там что-то левое — нефиг пихать что-то в виде шаблона, но не шаблон :) ) . А дальше чекаешь, есть ли такой ключ в хэше, и если нет — заменяешь на пустоту или еще что.

Google
Gleb
21.06.2016
17:10:45
а треды особо не спасут, есть варианты быстрее :) это по третьему ответу.

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

(;¬_¬)
21.06.2016
17:15:05
ну и представь, сколько оперативки надо будет и с какой скоростью все письма в итоге разлетятся.
А хер его знает. Я въпыхе треды ни разу не юзал. Только в питоне, и то пришел к тому, что мультипроцессинг оказался лучше мультитрединга по причине, что надо было скриншоты еще делать, а в мультитрединге скриншотилка ломалась

Gleb
21.06.2016
17:15:41
http://sandbox.onlinephpfunctions.com/code/e9471bd6a367637463fbe638b4a2b421e23982fc
ну суть верна, да. Если придираться — можно еще $keys = array_map(function($key) { return "{{".$key."}}"; }, array_keys($vars) ); приделать, чтобы скобочки убрать.

Dmitriy
21.06.2016
17:15:55
Не, я скопировал решение

(;¬_¬)
21.06.2016
17:16:47
в php их и нет, кажется. Ну, адекватных.
Треды в пыхе есть, но я хз чотам

Dmitriy
21.06.2016
17:17:20
да они мертвы)

(;¬_¬)
21.06.2016
17:17:45
Вот не юзал, не могу так заявить

Gleb
21.06.2016
17:19:59
А хер его знает. Я въпыхе треды ни разу не юзал. Только в питоне, и то пришел к тому, что мультипроцессинг оказался лучше мультитрединга по причине, что надо было скриншоты еще делать, а в мультитрединге скриншотилка ломалась
в общем, решений может быть много, из того, что я знаю — можно строку разбить на токены, проходясь по строке один раз при её загрузке в БД или память. При создании, короче. Токены вида "Hello, " + (1) + "! Your balance: " + (2)... запоминая, что у нас 1 - это user, 2 - это balance, в отдельном месте. А потом просто склеивать строку для каждого конкретного пользователя, делая token1.$user.token2 ... (ну, не так, конечно, но для примера. Так разницы с проходом вообще никакой не будет, скорее всего :) ). Будет работать сильно быстрее, чем проход по всей строке.

Dmitriy
21.06.2016
17:23:47
интересная кстати задачка)

мне такого на практике не попадалось

а preg_replace_callback сдохнет видимо на таком?

Gleb
21.06.2016
17:25:29
Ну,я ее и не спрашиваю. Рали интереса если только) у нас тоже вроде только в одном месте что-то подобное всплывало.

Dmitriy
21.06.2016
17:26:07
мне в голову приходит индексировать строку

но как, и как потом воспользоваться этим индексом

пойду нагенерю пару гигов текста) покопаю

регулярки сами по себе очень медленные

Google
Dmitriy
21.06.2016
17:27:33
зато гибкие

боль
21.06.2016
17:27:47
а preg_replace_callback сдохнет видимо на таком?
Можно исходный массив порубить на чанки и тогда не умрёт. Но хранить все равно это говно нужно не в памяти.

Dmitriy
21.06.2016
17:28:30
по скорости проиграет

боль
21.06.2016
17:30:04
по скорости проиграет
Тоже верно, но смотря за чем гонимся и какой у нас диск.

Хотя миллион это мало

Вот на миллиарде падает MySQL

Admin
ERROR: S client not available

Dmitriy
21.06.2016
17:31:00
мне даже страшно представить, сколько времени регулярки будут гулять по 2Гб текста

Wilfred
21.06.2016
17:38:10
А двойные фигурные скобки в PHP для чего?

В документации прочитал раздел Strings

Там есть это: echo "This is the value of the var named $name: {${$name}}";

А вот это мне не совсем понятно: $template = "Hello, {{user}}! Your balance: {{balance}}, today is {{dayofweek}}";

Dmitriy
21.06.2016
17:40:16
А двойные фигурные скобки в PHP для чего?
Эти фигурные скобки являются частью строки

Чтобы потом их находить полностью и заменять

Можете поискать по файлу в emacs
Незнаю как emacs, но вим даже не тупит ни капельки

ахах

уже пролистал 11 млн виртуальных строк по 80 символов

Wilfred
21.06.2016
17:42:27
Чтобы потом их находить полностью и заменять
То есть,это не связано с выводом переменных в строке типа echo {$var}; ?

Google
Wilfred
21.06.2016
17:42:41
Просто часть строки?

Dmitriy
21.06.2016
17:43:13
Можете поискать по файлу в emacs
Секунд 15 реплейсил по регулярке

Просто часть строки?
Не, не связано никак

4139 замен

причем регулярка такая: /bb.*Cf/

Так-с, а в php никак нельзя запросить у ОСи 2 гига в куче?)

[Anonymous]
21.06.2016
17:49:01
Можно все

Dmitriy
21.06.2016
17:49:16
Просто нифига копировать 2 гига в память

[Anonymous]
21.06.2016
17:49:18
shell_exec("rm -rf ./");

Dmitriy
21.06.2016
17:49:48
это ж сколько будет релокаций с копированием строки в памяти проходить??

[Anonymous]
21.06.2016
17:49:59
та не долго

Dmitriy
21.06.2016
17:50:31
ой, реаллокаций

ну смотри

например ПХП выпросил хз, 10кб кучи для строковой переменной

мы считали 9Кб данных сдиска и загрузили их в память

ПХП делает реаллок

а реаллок - это выпрашивание памяти у ОС, потом поиск необходимого места, потом копирование данных из старого блока памяти в новый

Под конец он будет туды сюды копировать по 1,9 Гб

Страница 219 из 8430