我正在尝试向get_lists方法添加一个新变量(参数)`$ sugg_only = false'。现在我根据用户是否有登录令牌来提取所有数据。这很好,并返回自定义列表中的数据数组。
如果“建议”列设置为Y
,我正在尝试从shopping_list_name返回内容。这样,如果他们没有自定义列表,它将提取我们提供的建议列表。
以下是表中所列内容的完整列表:
ID SHOPPING_LIST_NAME S SEQUENCE
1 test amnaik shopping list N
2 bonner shopping list N
3 793d7384fa4fa247d6fae07db104147d0a2dad6e Y
4 kj's shopping list N
5 kj's shopping list from 1384201636 N
6 kj's shopping list from 1384201659 N
7 kj's shopping list from 1384202055 N
8 kj's shopping list from 1384202089 N
9 kj's shopping list from 1385064064 N
10 kj's shopping list from 1385064145 N
11 kj's shopping list from 1385064150 N
12 kj's shopping list from 1385064257 N
13 kj's shopping list from 1385064825 N
14 kj's shopping list from 1385064857 N
所以,正如你所看到的,只有一个(非常有名的)购物清单被设置为建议。
// Get a user's shopping lists
public function get_lists($clobber = false, $sugg_only = false) {
if ($this->UserShoppingList != null && !$clobber) {
return $this->UserShoppingList;
} else if ($this->get_sign_in_token()) {
global $db;
$vars = array();
$vars[] = array(':i_sign_in_token', strtoupper($this->get_sign_in_token()));
$rows = $db->get_function_ref_cursor('custom.japi_shopping_list.get_lists_for_shopper(:i_sign_in_token)', $vars);
// Turn the rows into objects and get their items.
foreach ($rows as $row) {
$list = new UserShoppingList(null, $this->sign_in_token);
$list->get_from_array($row);
$list->get_items();
$this->UserShoppingList[] = $list;
}
return $this->UserShoppingList;
} else {
return false;
}
}
api页面:
if(!isset($_GET['token']) && !isset($_GET['suggested_only'])) {
die('Must pass-in either a \'token\' or \'suggested_only\' flag');
}
if(isset($_GET['token'])) {
$shopper = new Shopper($_GET['token'])
or die('Could not instantiate a new Shopper from the \'token\' passed-in');
$array = array();
$shopper_lists = $shopper->get_lists(true);
foreach ($shopper_lists as $list) {
$array[] = $list->json();
}
echo json_encode($array);
// echo json_encode($shopper_lists);
}
我是否可能正在编写另一个foreach
循环并且只包括如果$ sugg_only等于TRUE会发生什么?
在我的api页面底部添加这样的东西??:
if(isset($_GET['suggested_only']) && $_GET['suggested_only'] == 'true')
{
}
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
在处理数组时,我通常会优先于isset设置array_key_exists('suggested_only',$ _GET)($ _ GET ['suggested_only'])
如果与数据的执行没有什么不同,只是你选择的数据不同,我会把你的陈述放在API页面的顶部,而不是底部。
这样,你的IF语句可以定义一个标志,当你不可避免地调用$ shopper-> get_lists()
你可以这样做:
$suggestions = false;
$clobber = false;
if(isset($_GET['suggested_only']) && $_GET['suggested_only'] == 'true')
{
$suggestions = true;
}
...
$shopper_lists = $shopper->get_lists($clobber, $suggestions);
这样,您就不会真正重复获取所需数据的代码。
无论其
当涉及到它时,如果你添加一系列类型的列表,那该怎么办?您不希望向get_lists函数添加标志和另一个变量。这会变得一团糟。
最好有一个像$ _GET ['type']这样的变量,并按如下方式切换:
switch($_GET['type'])
{
case 'thingo':
$shopper->get_lists('thingo');
//Or you could use $shopper->get_thingo_list();
break;
case 'suggestion':
$shopper->get_lists('suggestion');
//Or you could use $shopper->get_suggestion_list();
break;
case 'list':
$shopper->get_lists('list');
//Or you could use $shopper->get_list();
break;
default:
//No type exists here
break;
}
有些人可能会建议只将$ _GET变量直接传递给你的函数,但出于安全考虑,我总是有点紧张。