如何将数组中的所有值设置为 false?
How to set all values to false in array?
我有这样的代码:
$iterator = 0;
while (($end = $sth->fetch()) && $iterator < 2)
{
$api_arr["data"]['tc'][] = $end["tc"];
$api_arr["data"]['em'][] = $end["em"];
$api_arr["data"]['sg'][] = $end["sg"];
$iterator ++;
}
我正在为其他开发者创建一个 API 我的网站。我给他们一个 JSON 输出。像这样:
{
-data{
tc: [
"value_tc_1",
"value_tc_2",
"value_tc_3"
],
em: [
"value_em_1",
"value_em_2",
"value_em_3"
],
sg: [
"value_sg_1",
"value_sg_2",
"value_sg_3"
]
}
}
当前输出: (当没有任何行时$sth->rowCount() == ''
)
[]
我想要的: (当没有任何行时$sth->rowCount() == ''
)
{
-data{
tc: [false],
em: [false],
sg: [false]
}
}
嗯,我该怎么做?
请教:没有结果的时候是否一定要设置false
为数组的值?我从来没有创建 API 的经验。我想根据一些类似的APIs (来自其他网站)设置false
。
实际上我想向其他开发人员展示一个可用的标准。那么,我做的是对的API吗?其他开发人员将能够使用它吗?
我不知道,也许我需要的是这个:
{
-data{
tc: false,
em: false,
sg: false
}
}
一般来说,有什么我需要知道的吗? {预先感谢:)
}
我试过的:我觉得这样的东西会有用,但实际上我不知道该怎么用:
array_fill_keys(array_keys($api_arr['data']), "false");
用空值初始化数组:
$iterator = 0;
$api_arr = [
'data'=>
[
'tc'=>[],
'em'=>[],
'sg'=>[]
]
];
while (($end = $sth->fetch()) && $iterator < 2)
{
$api_arr["data"]['tc'][] = $end["tc"];
$api_arr["data"]['em'][] = $end["em"];
$api_arr["data"]['sg'][] = $end["sg"];
$iterator ++;
}
如果数据库中没有结果,结果将是:
{
data{
tc: [],
em: [],
sg: []
}
}
这对于期望包含数组的数据结构的 API 消费者来说是一致的。可能整个结构都可以重构,但是一致性是一个好的开始
要扩展 "the whole structure can be refactored"
部分,查看数据,似乎这些值在数据库中按逻辑分组(一行包含相关的 tc
、em
和 sg
个单元格),但您却无缘无故地将它们分隔在 API 中。
更好的结构是遵循数据库的结构:
$iterator = 0;
$data = [];
while (($end = $sth->fetch()) && $iterator < 2)
{
$data[] = [
'tc'=> $end["tc"],
'em'=> $end["em"],
'sg'=> $end["sg"]
];
$iterator ++;
}
header('Content-Type: application/json');
echo json_encode([data=>$data]);
这将输出:
{
data:[
{tc: value_tc_1, em: value_em_1, sg: value_sg_1},
{tc: value_tc_2, em: value_em_2, sg: value_sg_2},
{tc: value_tc_3, em: value_em_3, sg: value_sg_3}
]
}
当你有结果时,并且:
{
data:[]
}
没有结果时。
消费者代码可以是例如(再次使用php,可以是任何语言):
$response = json_decode(file_get_contents($apiEndpoint));
foreach($response->data as $element){
echo '<tr><td>' . $element->tc . '</td><td>' . $element->em . '</td><td>' . $element->sg . '<td></tr>';
}
而且无论您的 api returns 是否有结果,消费者代码都运行良好(如果没有结果则只显示一个空的 table)。
最后一点,如果您的 SQL 更具体,例如:
SELECT tc, em, sg FROM tablename LIMIT 3
然后你的整个 php 代码变成:
header('Content-Type: application/json');
echo json_encode([data=>$sth->fetchAll()]);
无需迭代器、while 循环等
返回错误对象保持一致性并且很容易在客户端捕获:
说你 return 如果没有找到数据:
$api_arr["error"]["code"] = 404;
$api_arr["error"]["message"] = "No data found";
现在在客户端,在 ajax 请求中,有人可以轻松地做到这一点:
try {
if(typeof ajaxObj.error != 'undefined'){
throw ajaxObj.error;
}
//Data is found
} catch(errObj) {
//Handle the error object.
}
我有这样的代码:
$iterator = 0;
while (($end = $sth->fetch()) && $iterator < 2)
{
$api_arr["data"]['tc'][] = $end["tc"];
$api_arr["data"]['em'][] = $end["em"];
$api_arr["data"]['sg'][] = $end["sg"];
$iterator ++;
}
我正在为其他开发者创建一个 API 我的网站。我给他们一个 JSON 输出。像这样:
{
-data{
tc: [
"value_tc_1",
"value_tc_2",
"value_tc_3"
],
em: [
"value_em_1",
"value_em_2",
"value_em_3"
],
sg: [
"value_sg_1",
"value_sg_2",
"value_sg_3"
]
}
}
当前输出: (当没有任何行时$sth->rowCount() == ''
)
[]
我想要的: (当没有任何行时$sth->rowCount() == ''
)
{
-data{
tc: [false],
em: [false],
sg: [false]
}
}
嗯,我该怎么做?
请教:没有结果的时候是否一定要设置false
为数组的值?我从来没有创建 API 的经验。我想根据一些类似的APIs (来自其他网站)设置false
。
实际上我想向其他开发人员展示一个可用的标准。那么,我做的是对的API吗?其他开发人员将能够使用它吗?
我不知道,也许我需要的是这个:
{
-data{
tc: false,
em: false,
sg: false
}
}
一般来说,有什么我需要知道的吗? {预先感谢:)
}
我试过的:我觉得这样的东西会有用,但实际上我不知道该怎么用:
array_fill_keys(array_keys($api_arr['data']), "false");
用空值初始化数组:
$iterator = 0;
$api_arr = [
'data'=>
[
'tc'=>[],
'em'=>[],
'sg'=>[]
]
];
while (($end = $sth->fetch()) && $iterator < 2)
{
$api_arr["data"]['tc'][] = $end["tc"];
$api_arr["data"]['em'][] = $end["em"];
$api_arr["data"]['sg'][] = $end["sg"];
$iterator ++;
}
如果数据库中没有结果,结果将是:
{
data{
tc: [],
em: [],
sg: []
}
}
这对于期望包含数组的数据结构的 API 消费者来说是一致的。可能整个结构都可以重构,但是一致性是一个好的开始
要扩展 "the whole structure can be refactored"
部分,查看数据,似乎这些值在数据库中按逻辑分组(一行包含相关的 tc
、em
和 sg
个单元格),但您却无缘无故地将它们分隔在 API 中。
更好的结构是遵循数据库的结构:
$iterator = 0;
$data = [];
while (($end = $sth->fetch()) && $iterator < 2)
{
$data[] = [
'tc'=> $end["tc"],
'em'=> $end["em"],
'sg'=> $end["sg"]
];
$iterator ++;
}
header('Content-Type: application/json');
echo json_encode([data=>$data]);
这将输出:
{
data:[
{tc: value_tc_1, em: value_em_1, sg: value_sg_1},
{tc: value_tc_2, em: value_em_2, sg: value_sg_2},
{tc: value_tc_3, em: value_em_3, sg: value_sg_3}
]
}
当你有结果时,并且:
{
data:[]
}
没有结果时。
消费者代码可以是例如(再次使用php,可以是任何语言):
$response = json_decode(file_get_contents($apiEndpoint));
foreach($response->data as $element){
echo '<tr><td>' . $element->tc . '</td><td>' . $element->em . '</td><td>' . $element->sg . '<td></tr>';
}
而且无论您的 api returns 是否有结果,消费者代码都运行良好(如果没有结果则只显示一个空的 table)。
最后一点,如果您的 SQL 更具体,例如:
SELECT tc, em, sg FROM tablename LIMIT 3
然后你的整个 php 代码变成:
header('Content-Type: application/json');
echo json_encode([data=>$sth->fetchAll()]);
无需迭代器、while 循环等
返回错误对象保持一致性并且很容易在客户端捕获:
说你 return 如果没有找到数据:
$api_arr["error"]["code"] = 404;
$api_arr["error"]["message"] = "No data found";
现在在客户端,在 ajax 请求中,有人可以轻松地做到这一点:
try {
if(typeof ajaxObj.error != 'undefined'){
throw ajaxObj.error;
}
//Data is found
} catch(errObj) {
//Handle the error object.
}