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

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Пример из документации:
    $people = array( 
    array("name"=>"Bob","age"=>8,"colour"=>"red"), 
    array("name"=>"Greg","age"=>12,"colour"=>"blue"), 
    array("name"=>"Andy","age"=>5,"colour"=>"purple")); 
    
    var_dump($people); 
    
    $sortArray = array(); 
    
    foreach($people as $person){ 
        foreach($person as $key=>$value){ 
            if(!isset($sortArray[$key])){ 
                $sortArray[$key] = array(); 
            } 
            $sortArray[$key][] = $value; 
        } 
    } 
    
    $orderby = "name"; //change this to whatever key you want from the array 
    
    array_multisort($sortArray[$orderby],SORT_DESC,$people); 
    
    var_dump($people);


    Output from first var_dump: 
    
    [0]=> 
      array(3) { 
        ["name"]=> 
        string(3) "Bob" 
        ["age"]=> 
        int(8) 
        ["colour"]=> 
        string(3) "red" 
      } 
      [1]=> 
      array(3) { 
        ["name"]=> 
    
        string(4) "Greg" 
        ["age"]=> 
        int(12) 
        ["colour"]=> 
        string(4) "blue" 
      } 
      [2]=> 
      array(3) { 
        ["name"]=> 
        string(4) "Andy" 
        ["age"]=> 
        int(5) 
        ["colour"]=> 
    
        string(6) "purple" 
      } 
    } 
    
    Output from 2nd var_dump: 
    
    array(3) { 
      [0]=> 
      array(3) { 
        ["name"]=> 
        string(4) "Greg" 
        ["age"]=> 
        int(12) 
        ["colour"]=> 
        string(4) "blue" 
      } 
      [1]=> 
      array(3) { 
        ["name"]=> 
    
        string(3) "Bob" 
        ["age"]=> 
        int(8) 
        ["colour"]=> 
        string(3) "red" 
      } 
      [2]=> 
      array(3) { 
        ["name"]=> 
        string(4) "Andy" 
        ["age"]=> 
        int(5) 
        ["colour"]=> 
    
        string(6) "purple" 
      }
    Ответ написан
    Комментировать
  • Не правильно отображается дата при использовании модуля DateControl (kartik-v)?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Вам нужно перед сохранением в базу переконвектировать дату в unix формат сделать это можно так:
    (new DateTimeImmutable('05.07.2020'))->getTimestamp();
    Ответ написан
    Комментировать
  • Какие сущности или слои должно иметь приложения такого формата?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    1. DDD начинается не с базы, а с кода.
    2. Entity может быть разной. Если вы говорите про анемичную сущность, то у неё есть set и get. Однако это считается не очень хорошая практика. Больше она подходит для быстрой разработки. Поэтому сущность должна быть богатой. В идеале состоять только из методов модификации убирая get и set. В таком случае вы можете закладывать бизнес правила прямо в сущности. Вы сказали, что она не может состоять из логики - это ошибочно. Хорошая сущность должна иметь логику. Пример
    3. Entity ничего не возвращает. Это задача репозитория.
    4. Кроме Entity есть агрегат. Вот он как раз включает в себя все детали.

    Про DDD лучше читать или смотреть. Так как это достаточно обширная тема, в которой нужно разбираться не только по ответам на тостере, но и на практике.

    Статья в помощь: https://m.habr.com/ru/post/61524/
    Ответ написан
    Комментировать
  • Как вывести четные или не четные элементы массива?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    function odd($var)
    {
        // является ли переданное число нечетным
        return $var & 1;
    }
    
    function even($var)
    {
        // является ли переданное число четным
        return !($var & 1);
    }
    
    $array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
    $array2 = [6, 7, 8, 9, 10, 11, 12];
    
    echo "Нечетные:\n";
    print_r(array_filter($array1, "odd"));
    echo "Четные:\n";
    print_r(array_filter($array2, "even"));


    Используя анонимную функцию:
    $arr = [1,2,3,4,5,6,7,8,9];
    
    $odd = array_filter($arr, function($x) { return $x & 1;});
    
    echo "Нечетные:\n";
    print_r($odd);
    
    $even = array_filter($arr, function($x) { return !($x & 1);});
    
    echo "Четные:\n";
    print_r($even);
    Ответ написан
    7 комментариев
  • Как получить результат за пределами функции?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    function getUser($pdo, $userid)
    {
      $stmt = $pdo->prepare("SELECT * FROM tgb_user WHERE name = ?");
      $stmt->execute(array($userid));
      return $stmt->fetchAll();
    }
    
    $opt = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ];
    $pdo = new PDO($dsn, $user, $pass, $opt);
    $userid = $tgObj->message->from->id;
    $dataPdo = getUser($pdo, $userid);
    
    var_dump($dataPdo);
    Ответ написан
    3 комментария
  • Как получить элементы массива больше указанного?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    $num = 3;
    $arr = [3, 3, 4, 5];
    
    $arrFilter = array_filter($arr, function($x) use ($num) { return $x > $num;});
    Ответ написан
    Комментировать
  • Как узнать сколько раз число встречается в массиве?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Вариант 1
    $count = count(array_filter($uid, function($x) { return $x==12;}));

    Вариант 2
    $array = array(1, "hello", 1, "world", "hello");
    print_r(array_count_values($array))

    Результат:
    Array
    (
        [1] => 2
        [hello] => 2
        [world] => 1
    )
    Ответ написан
    1 комментарий
  • Что за мистика с условием при дробных числах?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Нужно округлить
    $a = 260 * 0.98;
    
    if (round($a, 1) < 254.8) {
      echo "Error";
    }
    
    var_dump($a);
    Ответ написан
    3 комментария
  • Как запускать php раз в час?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Cron
    Ответ написан
    Комментировать
  • Как сделать сортировку файлов из папки по дате изменения?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    function listdirByDate($path){
            $dir = opendir($path);
            $list = array();
            while($file = readdir($dir)){
                if ($file != '.' && $file != '..' && $file[strlen($file)-1] != '~' ){
                    $ctime = filectime( $path . $file ) . ',' . $file;
                    $list[$ctime] = $file;
                }
            }
            closedir($dir);
            krsort($list); // используя методы krsort и ksort можем влиять на порядок сортировки
            return $list;
        }
    Ответ написан
    Комментировать
  • Как узнать есть ли число в массиве?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    $arr = [1, 3, -5, 7];
    $num = 3;
      for($i=0; $i < count($arr); $i++) {
        if ($num == $arr[$i]) {
          return 1;
        }
      }
    
    return 0;


    in_array(3, $arr);
    Ответ написан
    Комментировать
  • Как вывести первый элемент меньше нуля?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    По вашему примеру будет так:
    $arr = [1, 3, -5, 4];
    
    for($i=0; $i < count($arr); $i++) {
        if($arr[$i] < 0) {
            return $arr[$i];
        }
    }

    Можно так:
    $arr = [1, 3, -5, 4];
    
    foreach($arr as $value) {
        if($value < 0) {
           return $value;
        }
    }
    Ответ написан
    Комментировать
  • Почему не разворачивается проект?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Информации достаточно мало может быть все что угодно. Нужно смотреть как у вас подключаются стили. Возможно они как-то не так публикуются. Или файл отсутствует. Смотрите консоль браузера. Например, на Yii2 есть кэш стилей в папке assets. Даже если удалить исходник, то в assets он будет и все будет работать. Но если запустить на новом, где нет этой папке - страницы будут кривыми.

    Возможно у вас нет прав доступа к этой папке где стили. Или где-то путь не верно указан.
    Ответ написан
  • Авторизация PHP + сессии - безопасность?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Тема неоднократно поднималась - можете посмотреть. Но есть пару видео про это. Полезные, но не знаю захочется ли вам смотреть. Однако оставлю ссылки. Думаю, будет полезно.

    Состояние: Cookies и сессии
    Способы аутентификации
    Ответ написан
    Комментировать
  • Как в Yii1.1 лучше реализовать кнопку перенаправляющую пользователя на другой контроллер?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    У вас всё верно. Если изменения произойдут на действующем проекте, то и изменении ссылки будет мало. Так как вы потеряете поисковые переходы. Для этого делают редирект на новый адрес средствами сервера. И есть такое понятие как Роутинг.
    Ответ написан
    Комментировать
  • Как отловить 503 ошибку php, yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    try {
        //Код с ошибкой
    } catch (Exception $e) {
        if ($e->getCode() === 503) {
            ///Ваша обработка
        }
        Yii::$app->errorHandler->logException($e); //Записываем ошибку в лог
    }
    Ответ написан
    1 комментарий
  • Yii2 Invalid argument supplied for foreach() в чём смысл ошибки?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Этот запрос не возвращает массив. Тут либо пусто, либо не массив.
    $masters = Master::find()->select('id' => '1')->where('rost')->one();

    Соотвественно foreach (перебор массива) не требуется в коде. Уберите его!
    Ответ написан
    Комментировать
  • Как отправлять письма в cqs команде?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Если будете напрямую подключать swiftmailer будете зависеть от него. Сделайте свой Sender, можно в виде интерфейса. Через DI будете подключать нужную реализацию. Вызывайте в команде. Тестируете сам сервис отправки, а не всю команду целиком.
    Ответ написан
  • Как убрать из кода страниц   через PHP?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    $text = htmlentities($text);
    $text = str_replace("&nbsp;", '', $text);
    Ответ написан
  • Как создать универсальное расширение для сайтов?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Этот вариант в принципе хорошо применим для более современных фреймворков, но Yii2 достаточно старый. Он не поддерживает PSR стандарты из-за которых он очень плохо совместим с другими. То есть для Yii написать такой модуль и подключить к симфонии невозможно, так же как и наоборот. К тому же на Yii используется Active Record, а на Symfony Doctrine. Поэтому вам можно вынести только какие-то компоненты и подключать их в своих проектах. С отдельным модулем будет сложно. Модуль Yii можно будет использовать только там. Если вы пойдёте таким способом, то вам нужно вынести этот пакет в репозиторий и подключать этот пакет через композер. Внутри проекта останется настроить конфиг, настроить зависимости через DI. Пример.

    2. Второй вариант более гибче. Это уже больше про микросервисы. Приложения будут взаимодействовать через API. В таком случае вам вообще без разницы какой там фреймворк и база. Современные большие системы именно так и устроены. Однако это сложна система, на которую требуется много знаний и времени.

    На вашем месте, проектируя на Yii2 я бы не стал об этом париться. Во-первых, этот иодвль врят ли кому будет нужен. Во-вторых, он не совместим с другими фреймворками. Если вам требуется такой модуль - просто копируйте его в другой проект. Если почувствуете, что часто изменяется и нужна совместимость с другими проектами - выносите в пакет и подключайте через композер.
    Ответ написан
    Комментировать