Php 配方计算器

Php 配方计算器,php,scale,recipe,Php,Scale,Recipe,我正在创建一个网站,存储食谱。我想做一个配方定标器,你可以输入所需的服务,脚本将转换配方成分,以匹配它。我可以很容易地改变数量,但我想知道如何转换单位。现在我知道我可以输入1500条if/then语句,但我正试图让它简单一点。:) 我在看一个叫Tasty Kitchen的网站。他们通过AJAX将服务发布到此文件(http://tastykitchen.com/recipes/wp-admin/admin-ajax.php),该文件将返回成分。然后它们会显示在页面上。例如,请转到 我将非常感激能得

我正在创建一个网站,存储食谱。我想做一个配方定标器,你可以输入所需的服务,脚本将转换配方成分,以匹配它。我可以很容易地改变数量,但我想知道如何转换单位。现在我知道我可以输入1500条if/then语句,但我正试图让它简单一点。:)

我在看一个叫Tasty Kitchen的网站。他们通过AJAX将服务发布到此文件(http://tastykitchen.com/recipes/wp-admin/admin-ajax.php),该文件将返回成分。然后它们会显示在页面上。例如,请转到

我将非常感激能得到的任何帮助


谢谢

我的建议是在数据库中存储一个服务,然后简单地乘以你想在页面上输入多少人

因此,如果您的用户选择了他们想要为4个人做一顿饭,那么您可以保留一个变量(会话、cookie等等)——在本例中,我们称之为
$peeps
——当您输出数据时,您可以这样做:

Echo "This will make $peeps portions:";
Echo "Ingredients:<br>";
Echo ($peeps*Ingredient1Quantity)." - ".$ingredient1Name."<br>";
Echo ($peeps*Ingredient2Quantity)." - ".$ingredient2Name."<br>";

@Caleb-Fluffeh的策略是将所有内容存储在一种测量类型中,然后使用一系列函数将它们转换为其他类型。我构建了一个web应用程序,它可以进行配方扩展,并能够以这种方式生成非常灵活的报告。另一个困难是液体测量与重量的对比。大规模的食品生产总是按重量来完成的,但小家伙有时会误解这一区别。以编程方式进行液体到重量的转换可能会很复杂,因为您需要知道液体的重量变化很大(想想蜂蜜和水……)

我不确定我是否真的理解正确?你想转换成不同的单位,还是只是缩放现有的单位?假设我有一个配方,需要2茶匙的东西。如果我把它增加三倍,我不希望它显示6茶匙,但2茶匙。茶匙和茶匙在不同的国家意味着不同的东西,我建议坚持使用国际单位制。进行这种转换的表格可以在任何烹饪书的背面找到。没有那么复杂;你看过了吗?澳大利亚汤匙是20毫升,美国汤匙是15毫升,这是我的观点。当1ml,1gram等总是相同的时候,我的问题不是乘法,但我需要知道如何转换单位,如果需要转换的话。(查看我对chameco的评论)@Caleb我刚刚看到了评论,并在您回答时添加了编辑。将数据库中的所有内容存储为公制(最简单的方法),然后根据服务将其相乘,并具有一个从公制转换为适当英制的功能。问题是我希望它转换单位,因此它将显示1/4杯vs 4 TB。此外,用户将输入配方,选择自己的单位。@Caleb我为您提供了一个函数的框架结构,该函数将进行转换,这将为您提供一个编写类似函数的良好开端。反转它也很容易,因此当用户输入一个度量值(如4汤匙)时,您可以转换它并将其存储在数据库中的度量值中。
// Assumes a function that converts to Imperial from Metric called convertToImperial()
Echo "This will make $peeps portions:";v
Echo "Ingredients:<br>";
Echo convertToImperial($peeps*Ingredient1Quantity)." - ".$ingredient1Name."<br>";
Echo convertToImperial($peeps*Ingredient2Quantity)." - ".$ingredient2Name."<br>";
// For example, input is passed as 
// $qty=30 (ml) 
// $serves is passed as 3 (ie, three people)
// $type is passed as liquid.

function convertToImperial($qty, $serves, $type)
{
    // Metric to Imperial will need a $type passed (Liquid, Weight, Other).
    // You can use a switch statement to pass between the different types.
    switch ($type)
    {
         case "Liquid":
             // Assumes 5ml is a teaspoon
             // Assumes 15ml is a tablespoon
             // Assumes 250ml is a cup.
             $CalMeasure=$qty*$serves; // Now at 90ml.
             // Here you can now choose to either pick the best match
             // ie, measurement with least remainder/exact measure
             // which in this case would be 6 tablespoons
             // or
             // switch measurement types after a certain quantity is reached.
             if ($CalMeasure>125) // Half a cup
             {
                 return (round($CalMeasure/250,2)." cups");
             }
             elseif ($CalMeasure>15) // tablespoons
             {
                 return (round($CalMeasure/15,2)." Tablespoons");
             }
             else
             {
                 return (round($CalMeasure/5,2)." Teaspoons");
             }
             break;
         case "Weight":
             // Similar approach to Weights, Convert Grams to Pounds and the like.
             return $WeightMeasured;
             break;
         default: // assumes Other (pinches, sprinkles etc
             // Similar approach again.
             break;
}