[英]Can't figure out algorithm in php
我正在使用mySql表中的每個保留創建一個保留系統。 該行包含三列:上午,下午和晚上。
reservation_id | date | morning | afternoon | evening
int(255) | d/t | 1/0 | 1/0 | 1/0
使用以下GUI,用戶可以為三個不同的部分添加或減少更多或更少的項目:
我正在嘗試將數字的任何可能的設置(> 0)寫到預訂表中的盡可能少的行中。 例如:
morning | afternoon | evening
3 | 1 | 2
可以在mysql表中轉換為(三+一+二=)6行。 但是將輸入轉換為三行會更好:
| morning | afternoon | evening
row 1 | 1 | 1 | 1
row 2 | 1 | 0 | 1
row 3 | 1 | 0 | 0
有人可以幫我寫這個算法嗎? 先感謝您! [R
//回復表中的每一行都是一條船。 在主概述中,同一條船上有三行,每一行都包含當天或上午,下午或晚上的預訂,這很奇怪。
<?php
$data = array('morning' => 3, 'afternoon' => 2, 'evening' => 1);
for($i=0;$i<max($data);$i++) {
$m = ($data['morning']<=$i) ? 0 : 1;
$a = ($data['afternoon']<=$i) ? 0 : 1;
$e = ($data['evening']<=$i) ? 0 : 1;
mysql_query("INSERT INTO x(morning, afternoon, evening) VALUES($m, $a, $e)");
}
用偽代碼:
while( $morning > 0 ||
$afternoon > 0 ||
$evening > 0 )
{
$thisMorning = ($morning == 0 ? 0 : 1);
$thisAfternoon = ($afternoon == 0 ? 0 : 1);
$thisEvening = ($evening == 0 ? 0 : 1);
insert_row ( $thisMorning, $thisAfternoon, $thisEvening );
if ($morning > 0) $morning--;
if ($afternoon > 0) $afternoon--;
if ($evening > 0) $evening--;
}
$morn = 3;
$aft = 2;
$eve = 1;
while($morn > 0 || $aft > 0 || $eve > 0) {
$row = array();
$row['morn'] = $morn-- > 0 ? 1 : 0;
$row['aft'] = $aft-- > 0 ? 1 : 0;
$row['eve'] = $eve-- > 0 ? 1 : 0;
$rows[] = $row;
}
現代計算機和現代數據庫是如此之快,您真的不必擔心重復。 使用最簡單的表示形式,而不是行數最少的表示形式。 您不必擔心行數,直到您達到1,000,000,甚至達到可爭議的水平。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.