2013-02-26 2 views
1

у меня есть приложение, где я сохранить дни недели и часы работы на MySql следующим образом:Php массив итерация неудачу

0 10 22,1 10 22,2 10 22,4 10 22,5 10 22,6 10 22 

массив PHP выборки это из Mysql в следующих форматах

Array ([open_hours] => 0 10 22,1 10 22,2 10 22,4 10 22,5 10 22,6 10 22) 

0 10 22 просто означает, Monday 10am 22pm

Мой текущий код кажется не работает хорошо, ниже код, который я использую для форматирования даты и времени

$openHrs = $businessMapper->getBusinessHours($business_id); 
// return Array ([open_hours] => 0 10 22,1 10 22,2 10 22,4 10 22,5 10 22,6 10 22) 
$openHrs = explode(",", $openHrs['open_hours']); 
$weekdays = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); 
     foreach($openHrs as &$temp) { 
      //$temp = $weekdays[$temp[0]] 
      $temp = explode(" ", $temp); 
      //$temp = explode(" ", $temp); 
      $temp[1] = $temp[1] > 12 ? $temp[1] - 12 . 'pm' : $temp[1] . 'am'; 
      $temp[2] = $temp[2] > 12 ? $temp[2] - 12 . 'pm' : $temp[2] . 'am'; 
      $temp = $weekdays[$temp[0]] . ' ' . $temp[1] . ' ' . $temp[2]; 
     } 

Но проблема в том, что я получаю только один результат: Sat 10am 10pm. Как я могу исправить свой код? Благодаря!!

+0

Какой результат вы получаете? –

ответ

1

Проблема: каждый раз, когда foreach выполняет итерацию по записи, записывает предыдущее значение, т.е. $temp будет содержать только последнее значение.

Решение: Добавлен переменный $ res как массив и присвоен ему значение.

Попробуйте это:

$openHrs = $businessMapper->getBusinessHours($business_id); 
// return Array ([open_hours] => 0 10 22,1 10 22,2 10 22,4 10 22,5 10 22,6 10 22) 
$openHrs = explode(",", $openHrs['open_hours']); 
$weekdays = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); 
$res  = array(); 
     foreach($openHrs as &$temp) { 
      //$temp = $weekdays[$temp[0]] 
      $temp = explode(" ", $temp); 
      //$temp = explode(" ", $temp); 
      $temp[1] = $temp[1] > 12 ? $temp[1] - 12 . 'pm' : $temp[1] . 'am'; 
      $temp[2] = $temp[2] > 12 ? $temp[2] - 12 . 'pm' : $temp[2] . 'am'; 
      $res[] = $weekdays[$temp[0]] . ' ' . $temp[1] . ' ' . $temp[2]; 
     } 

echo "<pre>"; 
print_r($res); 
0

Еогеасп ($ openHrs как & $ TEMP)

вы не можете использовать переменную $ Темп в цикле!

0
$openHrs = $businessMapper->getBusinessHours($business_id); 
$openHrs = explode(",", $openHrs['open_hours']); 
$weekdays = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); 

$resultArray = array(); 

foreach($openHrs as $temp) { 
    $tempRecord = explode(" ", $temp); 

    if (count($tempRecord) == 3) { 
     $timeBegin = $tempRecord[1] > 12 ? $tempRecord[1] - 12. 'pm' : $tempRecord[1]. 'am'; 
     $timeEnd = $tempRecord [2] > 12 ? $tempRecord[2] - 12. 'pm' : $tempRecord[2]. 'am'; 
     $resultArray[] = "{$weekdays[$temp[0]]} {$timeBegin} {$timeEnd}"; 
    } 
} 
Смежные вопросы