• Yii2 как сделать пагинацию для сгруппированных строк?

    EnChikiben
    @EnChikiben
    Я делал как вы описали в два запроса, можно конечно замутить все с joinми и потом мудрить все это дело в коде, но это того не стоит (я делал кодом, но потом другой программист долго это вкуривал))) ).
    Ответ написан
    Комментировать
  • Что почитать, чтобы понимать синтаксис ОПП в PHP?

    27cm
    @27cm
    TODO: Написать статус
    Форумы и документация это конечно хорошо, но если вы не знакомы с ООП и только начинаете, то лучше - читайте книги. Для постижения азов рекомендую:
    Самоучитель PHP 5/6, Кузнецов, Симдянов
    PHP 5 (в подлиннике)
    Если не любите читать большие толстые книги, то можете просто прочитать главу по ООП в любой из этих книг.

    Что касается момента с $jsonError->error='No function called';, PHP в данном случае неявно создаёт объект stdClass. Делать так не желательно, т. к. PHP сделает предупреждение:
    Warning: Creating default object from empty value.
    Лучше писать так:
    <?php
    header('Content-type: text/html; charset=UTF-8');
    if (count($_REQUEST)>0){
        // ...
    }else{
        $jsonError = new stdClass();
        $jsonError->error = 'No function called';
        echo json_encode($jsonError);
    }
    ?>

    Результат будет тот же самый, но никаких предупреждений уже не будет.

    смысл $this нигде не объясняют

    https://php.net/manual/ru/language.oop5.basic.php
    Псевдо-переменная $this доступна в том случае, если метод был вызван в контексте объекта. $this является ссылкой на вызываемый объект. Обычно это тот объект, которому принадлежит вызванный метод, но может быть и другой объект, если метод был вызван статически из контекста другого объекта.

    return $this - делается это для реализации цепочек вызовов (Method Chaining).
    www.wisereport.ru/method_chaining
    Ответ написан
    4 комментария
  • PHP: как сгруппировать близкие по значению элементы массива?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Непонятная задача.
    Во-первых, решений может быть много. Например, пусть границы - abs(dx) <= 5, abs(dy) <= 5. Точки A=(0,0), B=(4,4), C=(7,7). Тогда решением будет и {A,B},{C} и {A},{B,C}. Из них правильно какое-то одно, или оба?
    А если точки A=(0,0), B=(4,4), C=(7,7), D=(11,11)? Годится ли решение {A},{B,C},{D}? В нём больше групп, чем в {A,B},{C,D}, но центральная группа плотнее.
    И наконец, является ли условие "posX && posY в группе отличаются каждая друг от друга не более чем на +\- какое-то значение" единственным? Если да - достаточно создать N групп, по одному элементу в каждой. Условие будет выполнено. А если нет - попытайтесь объяснить, почему конкретно это решение не годится. Сформулировать условие, которое нарушено. Может быть, тогда станет понятнее, что же это за задача. А пока это лишь пожелание "сделайте мне красиво".

    А если задача не формализована - ищите слово "кластеризация". Про неё много интересного написано.
    Ответ написан
    2 комментария
  • Как расположить объекты в системе координат XY внутри блока?

    @hedint
    Web разработчик
    Ну, раз их не нужно двигать и они сами не двигаются (нет никакой динамики), можно схитрить и сделать все это одним изображением, на которое сверху наложить невидимые блоки на каждый объект.
    Если хотите сложнее и лучше - возможно, canvas через какую-нибудь библиотеку для работы с ним.
    Ответ написан
    Комментировать
  • Как расположить объекты в системе координат XY внутри блока?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    <span class="object" style="left: 20%; top: 45.6%;"></span>

    .object {position: relative;} /* а можно и absolute */

    И дальше в js управлять свойствами left и top. А, вам не нужно менять положение - тем проще.

    Возможно, если много объектов, то перейти на использование canvas.
    Посмотрите на Fabric.js (есть статьи на хабре: один и два)
    Ответ написан
    Комментировать