簡體   English   中英

無法弄清楚PHP中的算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM