Здравствуйте. Есть вот такой js скрипт https://jsfiddle.net/j7nquh3t/4/ . Нужно перевести его на php. То есть, продублировать расчет данных на сервере. С ajax и mysql я более менее работать умею, а вот с датами, циклами и массивами - проблемы. Подскажите, как перевести этот код на php? Тут всего 10 строчек кода.
да там практически все то же самое - переменные проинициализировать php-шные, вместо объекта использовать массив, выбрать функцию создания даты (mktime или date), а из цикла вернуть полученный массив джаваскрипту - return $price
PHP: $start = "2016-01-30"; $end = "2016-12-31"; if (!empty($start) && !empty($end)) { $startDate = new DateTime($start); $endDate = new DateTime($end); $dates = array($startDate, $endDate); $pricesPerMonth = array( 1 => 1500, 2 => 2000, 3 => 1500, 4 => 2000, 5 => 1500, 6 => 2000, 7 => 1500, 8 => 2000, 9 => 1500, 10 => 2000, 11 => 1500, 12 => 2000 ); //echo ($endDate->getTimestamp() - $startDate->getTimestamp())*1000; $price = 0; for ($i = $startDate->getTimestamp(); $i <= $endDate->getTimestamp(); $i += 86400) { $newDate = new DateTime(); $newDate->setTimestamp($i); $m = $newDate->format('m'); $m = intval($m); if ($pricesPerMonth[$m]) { $price += $pricesPerMonth[$m]; } } var_dump($price); } Вот код, результат работы такой же как в вашем js-коде.
Стоимость проживания в гостиничном номере за сутки. 1 - январь, 2 - февраль. Я допустил ошибку... Моя оплошность... Я не указал, как я получаю данные о стоимости (1 => 1500, 2 => 2000, 3 => 1500...). Они приходят мне из бд вот в таком виде: PHP: {"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: $nnomer = "lux"; const SQL_GET_MENU_NOMERPRICE = ' SELECT `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12` FROM nomerprice WHERE name = :name '; $pdo = new PDO($dsn, $user, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare(SQL_GET_MENU_NOMERPRICE); $res = $stmt->execute([':name' => $nnomer]); $nprice = json_encode(array_pop($stmt->fetchAll(PDO::FETCH_OBJ)), JSON_NUMERIC_CHECK);
@drkrol, это json-строка. Ее можно декодировать и получится такой же массив который выше в примере. PHP: 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} ', TRUE) --- Добавлено --- Результатом работы функции будет: Код (Text): array (size=12) 1 => int 1500 2 => int 1000 3 => int 2000 4 => int 1000 5 => int 1500 6 => int 2000 7 => int 1500 8 => int 2000 9 => int 1500 10 => int 3000 11 => int 2000 12 => int 1500