
[Anonymous]
21.06.2016
16:57:38
типр гуру по пхп?

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

Dmitriy
21.06.2016
16:57:41

Google

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

[Anonymous]
21.06.2016
16:59:14

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

Dmitriy
21.06.2016
17:01:53

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:46

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

Gleb
21.06.2016
17:07:00

(;¬_¬)
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

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

Gleb
21.06.2016
17:16:02

Dmitriy
21.06.2016
17:16:08

(;¬_¬)
21.06.2016
17:16:47

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

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Гб текста

боль
21.06.2016
17:31:26

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}}";

боль
21.06.2016
17:39:56

Dmitriy
21.06.2016
17:40:16
Чтобы потом их находить полностью и заменять
ахах
уже пролистал 11 млн виртуальных строк по 80 символов

Wilfred
21.06.2016
17:42:27

Google

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

Dmitriy
21.06.2016
17:43:13
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 Гб