За последние 24 часа нас посетили 18928 программистов и 1616 роботов. Сейчас ищут 1129 программистов ...

Как перевести с js на php?

Тема в разделе "PHP для новичков", создана пользователем drkrol, 4 дек 2016.

  1. drkrol

    drkrol Активный пользователь

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    Здравствуйте. Есть вот такой js скрипт https://jsfiddle.net/j7nquh3t/4/ . Нужно перевести его на php. То есть, продублировать расчет данных на сервере. С ajax и mysql я более менее работать умею, а вот с датами, циклами и массивами - проблемы. Подскажите, как перевести этот код на php? Тут всего 10 строчек кода.
     
  2. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    да там практически все то же самое - переменные проинициализировать php-шные, вместо объекта использовать массив, выбрать функцию создания даты (mktime или date), а из цикла вернуть полученный массив джаваскрипту - return $price
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Расчет какой цены производится там?
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    PHP:
    1. $start = "2016-01-30";
    2. $end = "2016-12-31";
    3. if (!empty($start) && !empty($end)) {
    4.     $startDate = new DateTime($start);
    5.     $endDate = new DateTime($end);
    6.     $dates = array($startDate, $endDate);
    7.  
    8.     $pricesPerMonth = array(
    9.         1 => 1500, 2 => 2000, 3 => 1500, 4 => 2000, 5 => 1500,
    10.         6 => 2000, 7 => 1500, 8 => 2000, 9 => 1500, 10 => 2000,
    11.         11 => 1500, 12 => 2000
    12.     );
    13.     //echo ($endDate->getTimestamp() - $startDate->getTimestamp())*1000;
    14.     $price = 0;
    15.     for ($i = $startDate->getTimestamp(); $i <= $endDate->getTimestamp(); $i += 86400) {
    16.         $newDate = new DateTime();
    17.         $newDate->setTimestamp($i);
    18.         $m = $newDate->format('m');
    19.         $m = intval($m);
    20.         if ($pricesPerMonth[$m]) {
    21.             $price += $pricesPerMonth[$m];
    22.         }
    23.     }
    24.     var_dump($price);
    25. }
    Вот код, результат работы такой же как в вашем js-коде.
     
    denis01 нравится это.
  5. drkrol

    drkrol Активный пользователь

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    Стоимость проживания в гостиничном номере за сутки. 1 - январь, 2 - февраль.
    Я допустил ошибку... Моя оплошность... Я не указал, как я получаю данные о стоимости (1 => 1500, 2 => 2000, 3 => 1500...). Они приходят мне из бд вот в таком виде:
    PHP:
    1. {"1":1500,"2":1000,"3":2000,"4":1000,"5":1500,"6":2000,"7":1500,"8":2000,"9":1500,"10":3000,"11":2000,"12":1500}
    Если вам не сложно, подскажите пожалуйста, как прикрутить такой ответ к расчету?

    Вот так я получаю от бд ответ
    PHP:
    1. $nnomer = "lux";
    2.  
    3. const SQL_GET_MENU_NOMERPRICE = '
    4. SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12` FROM nomerprice WHERE name = :name
    5. ';
    6.  
    7. $pdo = new PDO($dsn, $user, $password);
    8. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    9. $stmt = $pdo->prepare(SQL_GET_MENU_NOMERPRICE);
    10. $res = $stmt->execute([':name' => $nnomer]);
    11. $nprice = json_encode(array_pop($stmt->fetchAll(PDO::FETCH_OBJ)), JSON_NUMERIC_CHECK);
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @drkrol, это json-строка. Ее можно декодировать и получится такой же массив который выше в примере.
    PHP:
    1. json_decode('{"1":1500,"2":1000,"3":2000,"4":1000,"5":1500,"6":2000,"7":1500,"8":2000,"9":1500,"10":3000,"11":2000,"12":1500}
    2. ', TRUE)
    --- Добавлено ---
    Результатом работы функции будет:
    Код (Text):
    1. array (size=12)
    2.   1 => int 1500
    3.   2 => int 1000
    4.   3 => int 2000
    5.   4 => int 1000
    6.   5 => int 1500
    7.   6 => int 2000
    8.   7 => int 1500
    9.   8 => int 2000
    10.   9 => int 1500
    11.   10 => int 3000
    12.   11 => int 2000
    13.   12 => int 1500
     
    drkrol нравится это.