Задать вопрос
  • Как реализовать алгоритм группировки массива по значению?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Решение в лоб: создаете ассоциативный массив, где ключ - время, значение - массив дней недели. И просто проходите каждый элемент $openingHours, берете с него время, проверяете, есть ли оно в нашем созданном массиве, если нет, создаем и добавляем туда день, если есть, то просто добавляем туда день.
    Ну, потом уже пишите функцию, которая преобразует наш созданный массив в тот, что вам нужно. Это тоже довольно просто, смотрим ключ, берем его значения, соединяем их через разделитель -, и используем как ключ в новом массиве.
    Ответ написан
    1 комментарий
  • Актуальные версии Java?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Ответ написан
    Комментировать
  • Как получить ID из обеих таблиц при выполнении Inner Join Left?

    mosesfender
    @mosesfender
    Меланхолик, параноик, падал с коек
    В select нужно приделать алиас к полю ID другой таблицы.
    select data.*, internal.ID as internalID, internal.Number as internalNumber, internal.Date, internal.Time, internal.Long from data left join `Internal` on data.Number = internal.Number
    Ответ написан
    1 комментарий
  • Как добавлять блоки на сайт через php?

    DevMan
    @DevMan
    элементарно: изучить основы по манам/туториалам, которых в инете овердофига.
    а с конкретными затыками уже милости просим сюда.
    Ответ написан
    Комментировать
  • Где лучше качество кода?

    Maksclub
    @Maksclub Куратор тега PHP
    Все плохо
    • Глобальные переменные — зло
    • На лицо некий код, который и с сессией работает и с БД — явное нарушение общепринятных принципов, например SRP
    • $dao как инициализирована? Явно не через конструктор
    • Использование цифры, вот сиди гадай по ней — это плохо, используйте именованную константу. Например 3 — это некий статус для desktop, вот и назовите ее STATUS_DESKTOP, хотя далее...
    • вы обращаетесь к одному методу, который шибко умный — работает с флагами, тем самым нарушая SRP и сам содержит if/else, сделайте просто 2 раздельных метода:
      getMobileOpinionList()
      getDefaultOpinionList()

    • Предикат лучше вынести в отдельный метод isMobileOnly(), тк условия могут поменяться в нем, не будете же везде в if менять по всему проекту
    Ответ написан
    33 комментария
  • Можно ли не использовать вентилятор в блоке питания ATX?

    Zoominger
    @Zoominger
    System Integrator
    Да, может. Инженеры не просто так поставили туда принудительное охлаждение, а подавляющее число поломок РЭА вызывается неверным температурным режимом.
    Оставьте, короче.
    Ответ написан
    Комментировать
  • PHP разбить текст на слова, вернуть слова и делители?

    GomelHawk
    @GomelHawk
    PHP / Symfony developer
    Можно немного проще:

    $string = 'МАЗ 5551  ... ';
    $result = \array_filter(
        \preg_split('/([\\s.,!-])/u', $string, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY),
        static function ($value) { return $value !== ' '; }
    );
    Ответ написан
    Комментировать
  • Сервер не видит tpl файл, почему?

    @PapaStifflera
    Родился, вырос...
    Очевидно, что ни Ubuntu, ни Ubuntu Server, ни VirtualBox здесь не виноваты.
    Разбирайтесь с кодом, путями и, возможно, правами доступа.
    Ответ написан
    5 комментариев
  • Как превратить фоновое изображение в водяной знак, изменив прозрачность?

    @iText_A
    Посмотрите пример BackgroundTransparent. Это вариант примера BackgroundImage

    В своем коде вы добавляете Image к экземпляру Document. В этом нет ничего плохого, но если вы хотите сделать изображение прозрачным, нужно создать мягкую маску. Это нетрудно, но есть и более простой способ сделать фон прозрачным: добавьте изображение прямо к содержимому, а затем определите прозрачность с помощью PdfExtGState:

    PdfCanvas canvas = new PdfCanvas(pdfDoc.addNewPage());
    ImageData image = ImageDataFactory.create(imgSrc);
    canvas.saveState();
    PdfExtGState state = new PdfExtGState();
    state.setFillOpacity(0.6f);
    canvas.setExtGState(state);
    canvas.addImage(image, 0, 0, pageSize.getWidth(), false);

    Вы можете сравнить результаты примеров выше и увидеть разницу.
    Мой пример написан на Java, но его легко изменить для C#.
    Ответ написан
    Комментировать
  • Как создать двухмерный штрихкод в виде векторного изображения?

    @iText_A
    Посмотрите пример BarcodePlacement. Здесь мы создаем три штрихкода PDF417:
    Image img = createBarcode(1, 1, pdfDoc);
    doc.add(new Paragraph(String.format("This barcode measures %s by %s user units",
        img.getImageScaledWidth(), img.getImageScaledHeight())));
    doc.add(img);
    img = createBarcode(3, 3, pdfDoc);
    doc.add(new Paragraph(String.format("This barcode measures %s by %s user units",
        img.getImageScaledWidth(), img.getImageScaledHeight())));
    doc.add(img);
    img = createBarcode(3, 1, pdfDoc);
    doc.add(new Paragraph(String.format("This barcode measures %s by %s user units",
        img.getImageScaledWidth(), img.getImageScaledHeight())));
    doc.add(img);

    Результат выглядит следующим образом:
    5d087aa1295b9835771594.png
    Штрихкоды
    Так выглядит один из штрихкодов внутри:
    5d087ac3eccf0509071833.png
    Векторные данные
    Я добавляю вид изнутри, чтобы показать, что двухмерный штрихкод не добавляется как растровое изображение (как в вашем примере). Это векторное изображение, состоящее из группы маленьких прямоугольников. Вы можете проверить это самостоятельно в файле barcode_placement.pdf
    ОбъектImageне должен вас запутать. Если вы посмотрите на метод createBarcode(), то увидите, что Image в действительности является векторным изображением:
    public Image createBarcode(float mw, float mh, PdfDocument pdfDoc) {
        BarcodePDF417 barcode = new BarcodePDF417();
        barcode.setCode("BarcodePDF417 barcode");
        return new Image(barcode.createFormXObject(Color.BLACK, pdfDoc)).scale(mw, mh);
    }

    Высота и ширина, которые передаются через метод scale(), определяют высоту и ширину маленьких прямоугольников. Во внутренней части штрихкода, можно увидеть следующее:
    0 21 3 1 re
    Это прямоугольник, у которого x = 0, y = 21, ширина — 3, а высота —1.

    Когда вы запрашиваете размер штрихкода, то получаете число необходимых прямоугольников. Размеры штрихкода будут рассчитываться следующим образом:
    Rectangle size = barcode.getBarcodeSize();
    float width = mw * size.getWidth();
    float height = mh * size.getHeight();

    Вы допускаете, что значение size (размер в единицах пользователя) верно, только если mw и mh равняются 1.

    Я использую значения для создания примера PdfFormXObject и переношу его в Image. Затем я могу добавить Image к документу, как и любое другое изображение. Основное отличие этого изображения от обычных заключается в том, что оно векторное.
    Ответ написан
    Комментировать
  • 4 модуля ОЗУ и процессор поддерживающий только 2 канала памяти?

    Zoominger
    @Zoominger
    System Integrator
    Заведутся. Каналы - это логическое понятие, со слотами связанное слабо.
    Ответ написан
    1 комментарий
  • Как сделать РУТ права на sony xperia XA (f3111)?

    NeiroNx
    @NeiroNx
    Программист
    Комментировать
  • Нужен ли класс в этом случае? Или можно держать функцию особняком?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это проблема упрощения.
    Реальный код трудно понять, поскольку он учитывает множество нюансов, важных в реальной жизни.
    поэтому в обучающих материалах код упрощают, так что начинает казаться что без классов будет даже проще.

    Кроме того, авторы видеокурсов в большинстве своем - неграмотные имбецилы, которые с трудом понимают код, который пишут. Кроме шуток. Пример. Вот так пишут обезьяны:
    $i = 0;
        $newsList = array();
        while($row = $result->fetch()) {
          $newsList[$i]['id'] = $row['id'];
          $newsList[$i]['title'] = $row['title'];
          $newsList[$i]['date'] = $row['date'];
          $newsList[$i]['author_name'] = $row['author_name'];
          $newsList[$i]['short_content'] = $row['short_content'];
          $i++;
        }
        return $newsList;

    Реально, макаки.
    Этот гамадрил где-то сам увидел обучающий материал из 1990-х годов прошлого века, запомнил его, и теперь лепит уже в свои "обучающие ведидео".
    при том что если бы он понимал смысл этого кода, то написал бы просто
    $newsList = array();
        while($row = $result->fetch()) {
          $newsList[] = $row;
        }
        return $newsList;

    Поскольку $row уже содержит все нужные данные и переливать их из пустого в порожнее не нужно.
    А если бы наш бабуин хотя бы раз в жизни поинтересовался инструментами, которые он использует, то написал бы и вовсе одну строчку,

    return $result->fetchAll();

    Поскольку все уже написано до нас - надо только руку протянуть и использовать готовое.

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

    Если вернуться к теме "отдельные функции или класс", то для примера приведенного здесь класс, действительно, не нужен. Любая коллекция статических методов может быть заменена на набор функций.

    В нормальной же модели класс нужен, поскольку в ней будут использоваться переменные класса, например соединение с БД. Таким образом его можно будет передать в конструктор один раз и не писать соединение в каждом методе.
    Также в модели удобно прописать имя таблицы. Тогда множество методов можно будет унаследовать от единого прототипа. например

    abstract class Model {
        protected $table;
        protected $db;
        public function __construct($db) {
             $this->db = $db;
        }
        public function find($id) {
            $sql = "SELECT * FROM `$this->table` WHERE id=?";
            $stmt = $this->db->prepare($sql);
            $stmt->execute([$id]);
            return $stmt->fetch();
        }
    }
    class News extends Model {
            protected $table = 'news';
    }
    $news = new News($db);
    $article = $news->find($id);


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

    Если хочется нормальных обучающих материалов, рекомендую канал Дмитрия Елисеева, https://www.youtube.com/user/ElisDN/videos
    Ответ написан
  • Как произвести правильный подсчет в тесте?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Такой код, где много if, else тестировать очень сложно и это сложно читаемо. Вынесите весь код логики в отдельные классы, с методами и тестируйте их. Например класс может быть класс QuestionPoint . В нем методы
    public function isAnswerExists($answers){}

    и тому подобные..

    Получится такой код, если совсем примитивно

    $question = 1;
    foreach ($questions as $key => $question) {
    $questionPoint = new  QuestionPoint($question);
    $questionPoint->isAnswerExists($question, $answer)
    }


    Поэтому делайте код по ООП или DDD и тогда будет вам счастье. В вашем случае будет гемор. Особенно если код в контроллере. Тестировать его будет крайне сложно и долго. Такие тесты запускать никому не захочется. Вам придется в тестах поднимать приложение и базу данных. Хотя в вашем случае это вообще лишнее!

    В общем выносите код из контроллера и избавляйтесь от лапши. Создавайте объекты.
    Ответ написан
    2 комментария
  • Где сейчас тусуются серьезные PHP программисты?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Завсит от цели, для чего это спрашивается.

    Если чтобы поприставать с нубскими вопросами - то нигде.
    Если чтобы почитать умных мыслей - РНР дайджест на Хабре прекрасно суммирует все, что было написано за две недели. У меня например никогда не хватает времени, чтобы прочесть всё. Куда больше-то - я уж и не знаю.
    Если чтобы поучаствовать в серьезном прокете - на гитхабе, выбирай любой.
    Если чтобы послушать интересные доклады и пообщаться вживую - то конференции.
    Если интересует внутренне устройство языка - то php internals.
    Если интересует, что пишут пхп селебрити про что угодно, кроме программирования - то твиттер (Расмус показывает картинки из аэропортов и роботов, которых собирает его сын, Сара постит котиков - и так далее).

    Где точно не тусуются:
    Тостер и всякие подобные ресурсы типа стаковерфлоя.
    Ну то есть специалиста можно найти, если поискать, но концентрация будет гомеопатическая, если учитывать количество восторженных щеночков, которые увидели язык вчера, и спешат срочно поделиться уже накопленным багажом знаний.
    Чаты. Телеграм, дискорд - вот это вот все.
    Самая адовая трата времени, которая в принципе бывает в жизни.
    Опять же, люди пишут о чем угодно, кроме программирования, и ради пары полезных строчек надо убить весь день.
    Ответ написан
    4 комментария
  • Как заменить разные слова на ссылки с помощью preg_replace?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Смотрите в код и думайте, что ваш код выполняет на самом деле. Смотрите отладчиком содержимое переменных либо банально распечатайте их.

    1) Вы сначала делаете match (не знаю зачем, ну да ладно, не о том вопрос).
    2) Затем обходите результаты.
    3) Затем игнорируете то что вы нашли и по всё той же регулярке что в пункте 1 заменяете всё в строке на певрое совпадение.

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

    Через preg_replace это делать банально проще и удобнее, чем match + цикл по нему. А есть ещё preg_replace_callback если просто replace не хватает.
    Ответ написан
    1 комментарий
  • Какой PHP устанавливать себе локально для изучения? PHP-fpm или PHP?

    @neznae4ko
    Программирую, разрабатываю, печатаю, паяю и создаю
    Для изучения разницы нет. Для изучения подойдет классическая связка LAMP
    Ответ написан
    Комментировать