2010-12-20 81 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