• Как заменить отметки/теги (#tag или @user_name) на ссылки с помощью Regex?

    toxa82
    @toxa82
    $text = 'Example text with @user_login123 and #tag';
    $res = preg_replace('/@([\w]+)/ius', '<a href="/users/$1">@$1</a>', $text);
    $res = preg_replace('/#([\w]+)/ius', '<a href="/tags/$1">#$1</a>', $res);
    var_dump($text, $res);

    string 'Example text with @user_login123 and #tag' (length=41)
    string 'Example text with <a href="/users/user_login123">@user_login123</a> and <a href="/tags/tag">#tag</a>' (length=100)
    Ответ написан
    7 комментариев
  • Есть ли на php библиотека для Telegram, подобная Telethon на Python?

    @Redeve
    Веб-макаке не хватит и 640гБ
    Ответ написан
    Комментировать
  • Нормализация базы данных?

    agoalofalife
    @agoalofalife
    Team Lead
    Часто бывает что выгодно делать именно денормалазацию данных. Тут как везде борьба компромиссов.
    Я тут накидаю своих размышлений а у вас будет почва для дополнительных раздумий.
    Для наглядности я сюда схему прикрепил
    5fd339050f4b3128986508.png

    Нормализация
    Группы, инструменты, музыканты сейчас нормализованы, и они храняться в отдельных таблицах.
    Преимущества:
    - Мы можем переиспользывать эти данные
    - В других таблицах, это внешний ключ и мы получаем индекс
    - База следит за целостностью информации(то есть, если мы добавляем новый состав, группа должна существовать. Если мы захотим удалить группу, база данных может нам запретить это сделать так как у нас есть записи в таблице состав группы. Это уже настройки restrict or update) На первый взгляд не самое очевидное, но важное преимущество тем не менее.
    И вот почему, мы можем денормализовать эти таблицы, добавляя как строку в pivot table(таблица составов и остальные что ниже на диаграмме) вместо внешнего ключа:
    - Меньше запросов при insert
    - Если сделать индекс, не надо ходить за id в верхние таблицы, но ...
    Собственно весь мир стремиться к хаосу и код не исключение. Давая повод для вставки простой строки, мы провоцируем все это на хаос. Может вы знаете конечный список групп, но кто то не знает и может вставить что угодно, соответственно из за этого будет проблемы.

    Подход от бизнеса
    Стоит учитывать так же, что не всегда и не везде нужны например составы групп. Возможно требуется только актуальный сейчас, а те что были хранятся для истории. Тогда схему можно переорганизовать, и добавить хранение только текущих музыкантов, а историю с логом выносить в другое место.
    Следует задавать себе вопросы:
    - А как может быть дальше?
    - Какие могут быть выборки, вставки, добавление и далее?(возможно вам надо выбрать другой тип хранения, где отсутствует транзакции и очень быстрая выборка(MyISAM для примера)
    - Какое кол-во данных будет храниться?Что будет добавлять регулярно а что нет?
    И многие другие вопросы(они будут увеличиться с опытом)
    Отчасти усложнять сис-му в начале не стоит(но думать об этом надо), добавить индексы, денормализацию и так далее, делают скорее после под обстоятельства.

    Работа в самом коде
    Возможно вас пугает кол-во вставок при такой архитектуре. Это реляционная база данных, и связи одно из главных вещей(преимуществ) и она отражена в названии.
    В коде это организуется конечно иначе, в зависимости от использования подхода к работе с базой.
    Это может быть:
    - Active Record(Eloquent - laravel)
    - Data mapping (Doctrina - Symfony)
    Не углубляясь в подробности, часть будет инкапсулирована и вставка будет проще(в самом коде).
    Зависит так же от интерфейса, при том примере что у вас выше:
    В окне пользователя будет вводиться сразу вся информация.
    И это не всегда так, в зависимости от подхода(может быть SPA приложение), в одном окне может добавляться состав группы, в другом из form select, набираться музыканты в этот состав.
    Резюмируя - реляционная база это кончено связи. Можете попробовать организовать такое в NoSQL. Таблицы что выше, кто - то называет их справочниками.(можно организовать кэш по ним, если они не изменяются, а только переиспользуются и добавляются новые).
    Надеюсь хоть в чем то вам помог.
    Ответ написан
    1 комментарий
  • Нормализация базы данных?

    @tukreb
    Почитайте книгу
    "Программирование баз данных SQL. Типичные ошибки и их устранение"
    И у вас отпадёт часть вопросов.
    Ответ написан
    1 комментарий
  • Как выделить отдельным div каждую секцию, которую формирует php?

    Fragster
    @Fragster
    помогло? отметь решением!
    Если буква отличается от предыдущей, вывести </div><div>, для этого нужна дополнительная переменная, куда нужно запоминать букву текущей итераци для использования в следующей.
    Корректно обработать случай первого и последнего элемента массива (в первом случае вывести просто <div>, во втором - </div>).
    Ответ написан
    2 комментария