上記のように、おそらくリレーショナル データベースを使用したいと思うでしょう。以下に大まかなアイデアを示します。「pk」=主キー、「fk」=外部キー。明らかに、他の重要なフィールドをいくつか省略しています
tblRestaurant
pkRestaurant
tblRestaurantTypesItems
fkRestaurant
fldMenuType
fldItem
アイテムを取得するには、次のようなクエリを実行できます
SELECT * FROM tblRestaurant R INNER JOIN tblRestaurantTypesItems RTI ON
R.pkRestaurant=RTI.fkRestaurant ORDER BY R.pkRestaurant
私はこのクエリをテストしていませんが、それは大まかな考えです
これは、次のようなレコードセットを返します。
|Arbys |Breakfast|EGGS
|Arbys |Lunch |Burger
|McDonalds|Breakfast|McMuffin
|McDonalds|Breakfast|Hashbrown
|McDonalds|Breakfast|Coffee
|McDonalds|Lunch |Big Mac
|McDonalds|Dinner |Fries
または、より具体的に取得したい場合
SELECT * FROM tblRestaurant R INNER JOIN tblRestaurantTypesItems RTI ON
R.pkRestaurant=RTI.fkRestaurant WHERE R.pkRestaurant="McDonalds"
AND RTI.fldMenuType="Breakfast"
次の行に沿って何かを返します
|McDonalds|Breakfast|McMuffin
|McDonalds|Breakfast|Hashbrown
|McDonalds|Breakfast|Coffee
編集:朝食、ハンバーガー、デザートの代わりに朝食、昼食、夕食を使用することで、「メニュータイプ」のOPの意味から逸脱したことに気付きました. 同じ考えでしょう。
したがって、PHP で $menuTypes() の配列があり、各タイプに $items() の配列がある場合、元の質問で述べたように、$menuTypes['breakfast'] = $breakfastItems() のように、このようなもの..それを行うための最良の方法ではありませんが、まあ
$restaurant = "McDonalds"
foreach ($menuTypes as $items){
$menuTypeName = key($items); //not sure if key() works on elements of arrays
// which are arrays themselves
foreach($items as $item){
//Assuming "McDonalds" Is already in tblRestaurant so we don't need to
//insert it now
$query="INSERT INTO tblRestaurantTypesItems VALUES('".$restaurant."',
'".$menuTypeName."', '".$item."')"
//execute query
}
}