• Как построить регулярное выражение?

    @gigisarri98
    Попробуйте так:
    preg_match_all('#([А-Яа-я]){2}(-)(\d+)(/)(\d{4})#u', 'Ол-22/2021', $matches)
    Ответ написан
    Комментировать
  • Почему Laravel не подключается к БД во время тестирования?

    @gigisarri98 Автор вопроса
    Да, проблема была не "не подключается к БД", а в том, что ларавел в тестах не видела фасады и вообще всё, что касается предустановленных классов Лары (фасады, модели и тп).
    Решение:
    Поменять класс, который расширяет тест с PHPUnit\Framework\TestCase на Tests\TestCase и прописать:
    protected function setUp(): void 
        {
            parent::setUp();
            // дальнейший код сетапа
        }


    С чем связана такая проблема, я не понимаю.
    Ответ написан
  • Как передать имя класса в функцию?

    @gigisarri98
    Изменю ответ, потому что не понял вопроса, надеюсь этот поможет.

    Я не знаю, какие у Вас познания в PHP или бекенд-разработке, а также, какая архитектура у Вашего проекта, потому распишу 2 варианта примерно.

    В обоих случаях задачей сервера будет сформировать и выдать данные клиенту. В самом топорном варианте, Вы можете через php вернуть (или прямо вывести через echo) "обвернутые параметры". Вот прямо как Вы в комментариях под вопросом заскринили, вот все это и оформите прям в строку, подставляя нужные данные (из БД или откуда они берутся).
    Либо же, если у Вас MVC, вы передаете в представление данные, полученные аналогичному выше способом, и оформляете их в файле с представлением.

    Давайте допустим, что всё то, что Вы хотите расчленить на дивы, в итоге хранится в одном большом многомерном ассоциативном массиве (Я так пишу только потому что не понимаю, что Вы делаете, так что оставим это допущение), где ключом будет являться название класса будущего дива, а значением будут выступать вложенные массивы с непосредственно данными. Значит, вы просто в представлении с помощью цикла foreach перебираете массив (при необходимости - и вложенные) и обрамляете данные из него нужными тегами.

    Например, этот массив называется $data, тогда файл представления может выглядеть так:

    <div class="main">
    <?php foreach ($data as $class_name => $div_data): ?>
        <div class="<?= $class_name ?>">
            <?php foreach ($div_data as $text): ?>
            <span><?= $text ?></span>
            <?php endforeach; ?>
        </div>
    <?php endforeach; ?>
    </div>
    Ответ написан
    9 комментариев
  • Почему моя быстрая сортировка работает неочевидно?

    @gigisarri98 Автор вопроса
    Решалось все элементарно, как я понял, цикл доходил до итерации, где оставалось 2-3 элемента в массиве и ломался, потому что в цикл был включен перебор и опорного элемента. В итоге, просто явно указав циклу, что надо идти дальше, когда он доходит до пивота, проблема решилась и всё сортируется. Чтобы он не отсеивал одинаковые, я создал переменную $temp, которая служит маркером, был ли этот элемент уже перебран.
    function testsort(array $array) {
        if (count($array) < 2) {
            return $array;
        }
        
        $elem = [$array[(int)count($array) / 2]];
    
        $left = [];
        $right = [];
        $temp = '';
    
        for ($i = 0; $i < count($array); $i++) {
            if ($array[$i] < $elem[0]) {
                $left[] = $array[$i];
            }
    
            if ($array[$i] > $elem[0]) {
                $right[] = $array[$i];
            }
    
            if ($array[$i] == $elem[0]) {
                if ($temp) {
                    $left[] = $array[$i];
                } else {
                    $temp = $elem[0];
                    continue;
                }
            }
        }
    
        return array_merge(testsort($left), $elem, testsort($right));
    }
    Ответ написан
    Комментировать