Местоположение
Россия

Наибольший вклад в теги

Все теги (13)

Лучшие ответы пользователя

Все ответы (19)
  • Какая инфраструктура должна быть для 24/7 парсера обновляющего БД?

    hrabry
    @hrabry
    Посмотри в сторону https://amphp.org/, там и http клиент есть вместо CURL. Я на нём сделал демона который работает 24/7, если появляются новые запросы он обрабатывает их асинхронно. Так же реализовал возможность ограничить максимальное кол-во одновременно исходящих соединений как для всего сервера так и для отдельных источников.
    У меня 1 демон с каналом связи 100мбит/c за час 4-8 млн. страниц парсит, хз много это или мало....
    Ответ написан
  • Как исправить скрипт?

    hrabry
    @hrabry
    <?php
    
    function getColors($item_colors, $result = []){
        preg_match_all('/(\w+),|(\w+)\/(\w+)/', $item_colors, $colors);
        foreach ($colors as $key => $value) {
            if ($key === 0) continue;
            array_push($result, ...$value);
        }
        return array_filter($result);
    }
    
    
    $item_colors = "Vario Base Unit with steel, large, black/orange";
    
    echo implode(' ', getColors($item_colors));
    //steel large black orange
    
    var_dump(getColors($item_colors));
    // array(4) {
    //   [0]=>
    //   string(5) "steel"
    //   [1]=>
    //   string(5) "large"
    //   [5]=>
    //   string(5) "black"
    //   [8]=>
    //   string(6) "orange"
    // }


    Live: https://3v4l.org/JqTN1

    Ещё вариант:
    <?php
    
    $item_colors = "Vario Base Unit with steel, large, black/orange";
    
    $result = [];
    foreach (explode(', ', str_replace('Vario Base Unit with ','', $item_colors)) as $color) {
        $colors = explode('/', $color);
        count($colors) === 2 ? array_push($result, ...$colors) : array_push($result, $color);
    }
    
    
    
    echo implode(' ', $result);
    //steel large black orange
    
    var_dump($result);
    // array(4) {
    //   [0]=>
    //   string(5) "steel"
    //   [1]=>
    //   string(5) "large"
    //   [2]=>
    //   string(5) "black"
    //   [3]=>
    //   string(6) "orange"
    // }


    Live: https://3v4l.org/1JR98

    Ещё вариант для извращенцев)
    <?php
    
    $item_colors = "Vario Base Unit with steel, large, black/orange";
    
    $result = eval('return '.str_replace(['Vario Base Unit with ', '/', ', '], ['["',', ', '", "'], $item_colors).'"];');
    
    echo implode(' ', $result);
    //steel large black orange
    
    var_dump($result);
    // array(4) {
    //   [0]=>
    //   string(5) "steel"
    //   [1]=>
    //   string(5) "large"
    //   [2]=>
    //   string(5) "black"
    //   [3]=>
    //   string(6) "orange"
    // }

    Live: https://3v4l.org/TBdId
    Ответ написан
  • Какие в 2021 есть PHP CMS с базовыми функциями?

    hrabry
    @hrabry
    Octobercms годная штука. С пустой установки в ней практически ничего нету, всё нужное легко добавить или написать самому. Мне она как раз и нравится тем что в ней ничего лишнего нету, это можно назвать cmf а не cms. В общем одно удовольствие на ней разрабатывать какие то кастомные сайты, полный полет фантазии и свобода творчества). Под капотом используется laravel framework, так что изучая october будите изучать и laravel или наоборот.
    После того как вникните глядя на wordpress рыгать будите!
    Ответ написан
  • Как правильно сделать соответствие полей?

    hrabry
    @hrabry
    Можно что то типа такого сделать, а данные для сопоставления хранить уже где удобнее.
    <?php
    
    class KeysReplacer {
        public $default = [
            'id' => 'id',
            'full_address' => 'adress',
            'floorall' => 'floorall',
            'build_year' => 'build_year',
        ];
    
        public $services = [
            'service_1' => [
                'id' => 'internal_id',
                'full_address' => 'locality',
                'floorall' => 'floorall',
                'build_year' => 'build_date'
            ],
            'service_2' => [
                'id' => 'ид',
                'full_address' => 'полный_адрес',
                'floorall' => 'этажность',
                'build_year' => 'год_постройки'
            ],
        ];
        
        
        public function __invoke($item, $from = null)
        {
           $result = [];
                foreach($item as $key => $value){
                    $result[$from && isset($this->services[$from][$key])
                    ? $this->services[$from][$key]
                    : $this->default[$key]] = $value;
                }
            return json_encode($result, JSON_UNESCAPED_UNICODE);
        }
    
    }
    
    
    
    function getItem(){
        return [
            'id' => 1,
            'full_address' => 'г. Москва',
            'floorall' => 18,
            'build_year' => 1990
        ];
    }
    
    
    
    $item = getItem();
    
    $responseNormalizer = new KeysReplacer;
    
    $response_0 = $responseNormalizer($item);
    $response_1 = $responseNormalizer($item, 'service_1');
    $response_2 = $responseNormalizer($item, 'service_2');
    
    var_dump($response_0); // string(68) "{"id":1,"adress":"г. Москва","floorall":18,"build_year":1990}"
    var_dump($response_1); // string(79) "{"internal_id":1,"locality":"г. Москва","floorall":18,"build_date":1990}"
    var_dump($response_2); // string(112) "{"ид":1,"полный_адрес":"г. Москва","этажность":18,"год_постройки":1990}"


    Live: https://3v4l.org/sMBFN
    Ответ написан