我正在查询SQL数据库并返回一些值。我所拥有的是Field1
和Field2
,它们带有日期列表(最终可能有多达200个值/日期)。然后,我将当前日期重新格式化为所需的格式。
// While we have valid rows
while( $row = sqlsrv_fetch_array($rs, SQLSRV_FETCH_ASSOC)) {
//build an array of all fields and their values
$outputstring[] = $row;
}
// for each record, IF the fields exist, reformat the date
foreach($outputstring as &$each) {
if($each['Field1']) $each['Field1'] = $each['Field1']->format('m-d H:i');
if($each['Field2']) $each['Field2'] = $each['Field2']->format('m-d H:i');
}
// Output as JSON
echo JSE($outputstring);
我现在要做的是更改Field1
和Field2
的名称,而无需修改SQL查询,并且在将数组解析为JSON之前。
我通常只需要修改SQL;
Select Field1 as startdate, Field2 as enddate
但这不是选项,因为要使用的值必须来自转换函数。
在最终输出中,字段1需要显示为
的输出。lang('Field1');
此功能可根据用户在生成输出之前选择的内容,以33种语言之一翻译字段名称。
我可以使用类似的东西:
SELECT Field1 as ". lang('Field1') .", Field2 as ". lang('Field2') ."
,但希望使用PHP选项将语言值应用于数组中的所有键。如前所述,最终版本中可能有数百个字段,如果可以避免,我真的不想对每个可能的值进行硬编码。
有什么想法吗?
答案 0 :(得分:0)
如果我理解正确,可以使用它吗?
$formatted = [];
while( $row = sqlsrv_fetch_array($rs, SQLSRV_FETCH_ASSOC)) {
foreach($row as $key => $value) {
$formatted[lang($key)] = $value->format('m-d H:i');
}
}
// Output as JSON
echo JSE($formatted);
答案 1 :(得分:0)
再次感谢罗恩为我指出正确的方向。我走了这条路;
$outputarray = array();
while( $row = sqlsrv_fetch_array($rs, SQLSRV_FETCH_ASSOC)) {
$outputarray[] = $row;
}
$outputarray = replaceKey($outputarray,$lang);
echo JSE($outputarray);
ReplaceKey是一个函数,它查看输出数组以及我的语言文件,该文件是具有匹配输出值的另一个输入值数组;
$lang = array(
$Field1 => 'Time',
$Field2 => 'Hours',
);
使用ReplaceKey;
function replaceKey($o,$m=array())
{
$t = JSE($o);
foreach ($m AS $k=>$v)
{
$t = str_ireplace('"'.$k.'":','"'.$v.'":', $t);
}
$a = true;
if (is_object($o))
{
$a = false;
}
return JSD($t, $a);
}
该数组被循环,如果其中出现了Field1,则在用新的键重建输出数组之前,将其替换为“时间”一词。
再次,非常感谢您的帮助!