Отказ от ответственности: Я знаю, что у меня в моем коде устарели функции mysql. То есть на моем todo.достичь предела памяти с петлей внутри цикла внутри цикла
У меня есть выбор MySql, дающий мне сезоны для разных предметов в системе бронирования домов.
Вид:
Low season: 2010-01-01, 2010-03-01, 100 //meaning start,end,price
Это происходит в моем первом SQL:
while($season_row=mysql_fetch_assoc($season_res)){
$seasonsArray[$season_row['id_item']][] = array(
$season_row['season_start'],
$season_row['season_end'],
$season_row['daily_price']
);
}
Даты определены здесь (прибывающий в функцию в качестве YYYY-mm-dd
):
function seasonPrice($from,$to,$requested_item){
$start = round(strtotime($from)/86400)*86400; // like 2008-01-01
$end = round(strtotime($to)/86400)*86400; // to 2015-01-01
$formattedStart = date('Y-m-d', $start);
$formattedEnd = date('Y-m-d', $end);
сейчас Мне нужно зациклиться между двумя датами, между пунктами $seasonsArray
и затем проверить pri в этом конкретном дне.
Я сделал это с:
foreach($seasonsArray as $item=>$value){
for($thisDay = $start; $thisDay < $end; $thisDay = $thisDay + 86400){
foreach($value as $innerValue){
$season_start = roundToSeconds($innerValue[0]);
$season_end = roundToSeconds($innerValue[1]);
if($thisDay >= $season_start && $thisDay <= $season_end) {
$foundPrice[] = round($innerValue[2]);
}
}
$thisSerie[] = array($thisDay * 1000, isset($foundPrice) ? $foundPrice[0] : 0);
// security check to avoid double assigned seasons to same day
if(count($foundPrice) > 1){ die('There is double bookings in item: '.$item);}
unset($foundPrice);
}
$seasonPrices[] = array(
'data'=> $thisSerie,
'label'=> 'House ID: '.$item,
);
}
Но я получаю: Fatal error: Allowed memory size of 100663296 bytes exhausted
Любое предложение о том, где мой код может быть улучшен, чтобы не нужно так много памяти? Или есть ошибка, и я не вижу ее?
Что вы делаете с массивом сезонов? возможно, вы уже можете сделать это с помощью sql-запроса или, по крайней мере, частью этого, чтобы упростить его, 3 вложенные, чтобы выглядеть как-то плохое. – arieljuod
@arieljuod the seasons array - это просто сбор данных из SQL-запроса. Каждый элемент дома имеет много сезонов, например 4/5 в год, с началом и ценой за день в течение этого периода. Согласитесь с 3loops = нехорошо, но не видите лучшего способа ... – Rikard
можете ли вы разместить пример данных, которые вы получаете из базы данных и данных, которые вы хотите в конце циклов? это не clea, что вы хотите делать с этими циклами, может быть, пример может помочь. Я предполагаю, что yo может упростить цикл, делающий лучший запрос, но я не понимаю, чего вы хотите в конце – arieljuod