-2

我正在创建一个存储食谱的网站。我想做一个食谱缩放器-您可以在其中输入所需的份量,脚本将转换食谱成分以匹配它。我可以很容易地更改数量,但我正在尝试弄清楚如何转换单位。现在我知道我可以输入 1500 个 if/then 语句,但我试图让它更简单一些。:)

我正在查看一个名为 Tasty Kitchen 的网站。他们通过 AJAX 将服务发布到此文件 (http://tastykitchen.com/recipes/wp-admin/admin-ajax.php),然后该文件返回配料。然后他们将它们显示在页面上。例如,请访问http://tastykitchen.com/recipes/breads/plain-bagels/ 。

真的很感激我能得到的任何帮助。

谢谢!

4

2 回答 2

1

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

因此,如果您的用户选择了他们想要为 4 人制作餐点,那么您保留一个变量(会话、cookie 等等)——让我们$peeps在这个例子中调用它——当你输出数据时,你会这样做:

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

等等。

如果您希望您的网站也从英制转换为公制,您可以使用简单的功能轻松完成。

如果您将所有数据以公制存储在数据库中(或英制,但都是相同的类型),您可以通过根据用户偏好以类似方式将其转换为用户来轻松地输出它:

// 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;
}
于 2012-08-27T00:17:16.810 回答
1

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

于 2013-10-15T23:39:51.977 回答