我有一个名为refrigerator.csv
的CSV文件,如下所示:
+---------------+---------+--------+------------+
| item | amount | unit | use by |
+---------------+---------+--------+------------+
| bread | 10 | slices | 25/12/2017 |
+---------------+---------+--------+------------+
| cheese | 10 | slices | 25/12/2017 |
+---------------+---------+--------+------------+
| butter | 250 | grams | 25/12/2017 |
+---------------+---------+--------+------------+
| peanut butter | 250 | grams | 2/12/2017 |
+---------------+---------+--------+------------+
| mixed salad | 500 | grams | 26/12/2016 |
+---------------+---------+--------+------------+
和一个名为recipes.json
的JSON文件,如下所示:
[
{
"name": "grilledcheeseontoast",
"ingredients": [
{
"item": "bread",
"amount": "2",
"unit": "slices"
},
{
"item": "cheese",
"amount": "2",
"unit": "slices"
}
]
},
{
"name": "saladsandwich",
"ingredients": [
{
"item": "bread",
"amount": "2",
"unit": "slices"
},
{
"item": "mixedsalad",
"amount": "200",
"unit": "grams"
}
]
},
{
"name": "peanutbuttersandwich",
"ingredients": [
{
"item": "bread",
"amount": "2",
"unit": "slices"
},
{
"item": "peanut butter",
"amount": "250",
"unit": "grams"
}
]
}
]
我的任务是使用php创建一个控制台应用程序,将这两个文件放在行参数中,并根据冰箱中的项目输出推荐的食谱。已过去使用日期的成分无法使用。关于如何做到这一点的任何指示? (我是PHP初学者)
答案 0 :(得分:1)
首先使用过期日期过滤CSV文件中的所有内容(例如,当前日期大于CSV文件中列出的日期)。 PHP内置支持读取和写入CSV文件。 str_getcsv()
就是其中之一。可以找到文档:http://php.net/manual/en/function.str-getcsv.php。您可以使用此函数逐个读取文件并将其转换为数组。这些评论也提供了一些有用的指示。
过滤后,使用内置文件读取函数读取JSON文件,例如: file_get_contents()
(http://php.net/manual/en/function.file-get-contents.php)。这将读取由filename参数指向的给定文件到字符串中。使用内置json_decode()
(http://php.net/manual/en/function.json-decode.php)函数将输入字符串转换为对象或关联数组。
将JSON文件转换为对象或数组后,您可以遍历已过滤的成分列表并检查配方数据中是否存在匹配项。你可以通过一遍又一遍地循环你的食谱数据来寻找直接的方法,直到找到匹配,或尝试使用和/或组合更多的内置函数来解决问题。
尝试将解决方案分解为更小的问题,并专注于解决这些问题。