2010-12-20 69 views
0

我試圖製作一個整潔的結構化列表,在這種情況下,電影和showdates。在PHP和MySQL中遇到嵌套數組的輸出/結構問題

$shows = array(
    array(
     "Thursday" => array(
      "17:00", 
      "19:00")), 
    array(
     "Friday" => array(
      "16:30", 
      "18:45" 
      "20:10")), 
    array(
     "Saturday" => array(
      "18:30", 
      "21:00")) 
); 

問題是我似乎無法以合理的方式打印出來的東西。 這些日子應該是動態的,並不像這種情況那麼嚴格。

for ($row = 0; $row < $shows.length(); $row++) //Haven't got a clue about the 'length()' 
{ 
    print $shows[$row] . "<br>"; //Print the day. 

    for (

    $col = 0; $col < $shows[$row].length(); $col++) //Loop through each day. 
    { 
     print (">" . $shows[$row][$col] . "<br>"); //Print each time of the day. 
    } 

} 

而我試圖做的是每天打印出相應的時間。 應該像這樣。

Thursday - 17:00 
      19:00 

Friday - 16:30 
      18:45 
      20:10 
+1

你似乎被用來JavaScript的吧?在PHP中,有一種專門設計用於遍歷數組中元素的控制結構 - foreach。因爲這個原因,這裏的大部分答案都使用它。 – devius 2010-12-20 12:27:53

回答

1
foreach ($shows as $show) { 
    foreach ($show as $day => $times) { 
     echo $day; 
     foreach ($times as $time) { 
      echo $time; 
     } 
    } 
} 

但是,真的,你應該簡化這個有點像這樣:

$shows = array(
    array('day' => 'Saturday', 'times' => array('17:00', '19:00')), 
    … 
); 

foreach ($shows as $show) { 
    echo $show['day']; 
    foreach ($show['times'] as $time) { 
     echo $time; 
    } 
} 

或者說,做到這一點確實正確,並在計算機解析的方式:

$shows = array(
    strtotime('2010-12-24 17:00:00'), 
    strtotime('2010-12-24 19:00:00'), 
    … 
); 

$lastDate = null; 
foreach ($shows as $show) { 
    if (!$lastDate || date('Y-m-d', $show) != date('Y-m-d', $lastDate)) { 
     echo date('l', $show); 
    } 
    echo date('H:i', $show); 
    $lastDate = $show; 
} 

:o)

+0

鍛鍊得很好。但如果我想從MySQL數據庫(日期時間字段)獲取這些日期,我將如何建立這樣一個數組?我正在返回Array([0] => Array([date] => 2011-01-05 17:30:00))。 – Xavio 2010-12-20 14:04:51

+0

@Xavio這很接近最後一種情況,不是嗎?您可以使用從SQL查詢中獲得的數組,只需根據需要修改循環即可。我相信你可以弄明白。 :) – deceze 2010-12-20 23:22:00

0

在PHP到獲取數組中使用count函數的元素數量。

for ($row = 0; $row < count($shows); $row++) { 
     foreach($shows[$row] as $key => $vals) { 
       echo "$key - "; 
       $first = true; 
       foreach($vals as $val) { 
         if($first) { 
           echo "\t$val\n"; 
           $first = false; 
         } else { 
           echo "\t\t$val\n"; 
         } 
       } 
     } 
} 

Ideone Link