• Как переписать на php такой js код?

    vesper-bot
    @vesper-bot
    Любитель файрволлов
    Вообще, тут обычная математика. Просто запятая, как сказал Вадим, используется вместо записи полноценного блока операторов в цикле for() и в операторе возврата. Т.е. первая строка читается примерно так:
    if (c<0) { c=-c; f=0;}
    i=2/2+c;
    j=4*i-2;
    Здесь выполняется нормировка значения 2/2+abs(c) в рамки (-2,2) из исходных (0,1). Вторая строка итерирует массив d с конца, заполняя g и h промежуточными вычислениями, начиная с 0, переменная k всего лишь нужна хранить старое значение g. В третьей строке выполняется расчет для 0-го элемента цикла (формула та же, можно было закончить цикл и потом в формулу подставить полученный g), и возвращается значение sgn(c)*(1-l) где l вычисляется сразу перед return. Вот только что эта функция такого считает - несколько непонятно, может, корреляцию для некоего распределения известной формы и полученными из него значениями в d с предполагаемой величиной параметра c.
    Ответ написан
    Комментировать
  • Как переписать на php такой js код?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $e = count($d) - 1;
    $f = false;
    $g = 0;
    $h = 0;
    if ($c < 0) {
        $c = -$c;
        $f = true;
    }
    $i = 2 / (2 + $c);
    $j = 4 * $i - 2;
    for (; $e > 0; $e--) {
        $k = $g;
        $g = $j * $g - $h + $d[$e];
        $h = $k;
    }
    $l = $i * exp(-$c * $c + 0.5 * ($d[0] + $j * $g) - $h);
    return $f ? ($l - 1) : (1 - $l);

    Но результат может оказаться разным из-за разной точности вычисления exp.
    Ответ написан
    3 комментария
  • Как реализовать алгоритм группировки массива по значению?

    GomelHawk
    @GomelHawk
    PHP / Symfony developer
    Если предположить, что дни недели упорядочены по возрастанию, то можно использовать что-нибудь такое:

    $openingHours = [
        ['day' => 'monday', 'time' => '08:00-20:00'],
        ['day' => 'tuesday', 'time' => '08:00-20:00'],
        ['day' => 'wednesday', 'time' => '08:00-23:59'],
        ['day' => 'thursday', 'time' => '08:00-20:00'],
        ['day' => 'friday', 'time' => '08:00-20:00'],
        ['day' => 'saturday', 'time' => '10:00-16:00'],
        ['day' => 'sunday', 'time' => '10:00-16:00'],
    ];
    
    $result = $active = [];
    
    $openingHours[] = ['day' => '', 'time' => '']; // empty value to simplify code
    
    foreach ($openingHours as $openingHour) {
        if ($active) {
            if ($active['time'] === $openingHour['time']) {
                $active['end'] = $openingHour['day'];
            } else {
                $key          = $active['end'] ? $active['start'] . '-' . $active['end'] : $active['start'];
                $result[$key] = $active['time'];
                $active       = [];
            }
        }
        $active = $active ?: [
            'time'  => $openingHour['time'],
            'start' => $openingHour['day'],
            'end'   => null,
        ];
    }
    
    print_r($result);
    Ответ написан
    1 комментарий
  • Как реализовать алгоритм группировки массива по значению?

    Eridani
    @Eridani
    Мимо проходил
    Если по замыслу Владимир Проскурин
    $openingHours = [
                ['day' => 'monday', 'time' => '08:00-20:00'],
                ['day' => 'tuesday', 'time' => '08:00-20:00'],
                ['day' => 'wednesday', 'time' => '08:00-20:00'],
                ['day' => 'thursday', 'time' => '10:00-20:00'],
                ['day' => 'friday', 'time' => '10:00-18:00'],
                ['day' => 'saturday', 'time' => '10:00-16:00'],
                ['day' => 'sunday', 'time' => '10:00-16:00'],
            ];
    $temp = array();
    $result = array();
    
    foreach($openingHours as $key => $item) {
      $temp[$item['time']][] = $item['day']; 
    }
    foreach($temp as $key => $item){
      $count = count($item) -1;
      $count >= 1 ? $result[$item[0].'-'.$item[$count]] = $key : $result[$item[0]] = $key; 
    }
    print_r($result);


    Array
    (
        [monday-wednesday] => 08:00-20:00
        [thursday] => 10:00-20:00
        [friday] => 10:00-18:00
        [saturday-sunday] => 10:00-16:00
    )


    P.S. На другие реализации или упрощение вышеописанного и сам с удовольствием посмотрю
    Ответ написан
    1 комментарий
  • Как реализовать алгоритм группировки массива по значению?

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

    fomvasss
    @fomvasss
    PHP developer
    Я для подобной задачи поступал следующим образом:
    создавал scope (можно даже глобальный) который можно подключить в методе boot класса модели. Например:
    //...
    class Order extends Model
    {
        protected static function boot()
        {
            parent::boot();
            static::addGlobalScope('owner', function (Builder $builder) {
                      $user = Auth::user();
                      if (! $user->isAdmin()) {
                            $builder->where('user_id', $user->id);
                      }
            });
        }
    }

    Теперь при каждом обращении к order-ам, будет проверятся условие является ли юзер админом, если нет то добавится к запросу условие $builder->where('user_id', $user->id) .
    Не совсем хорошо использовать такую логику в моделях, но мне было удобно, и задачу решало,+ работает при обновлении, удалении, просмотре одного, просмотре списка и нечего дополнительно писать не надо.
    Ответ написан
    8 комментариев