2010-12-20 6 views
0

ここでは、フィルムとショーデートのきれいな構造リストを作成しようとしています。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

答えて

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データベース(datetime-field)からそれらの日付を取得したいのであれば、どうすればそのような配列を構築できますか?私はArray([0] => Array([date] => 2011-01-05 17:30:00))を返しています。 – Xavio

+0

@Xavioこれは最後のケースにかなり近いですね。 SQLクエリから取得した配列で作業するだけで、必要に応じてループを変更することができます。私はあなたがそれを理解することができると確信しています。 :) – deceze

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

関連する問題