在发送到JSON

时间:2018-08-10 20:56:23

标签: php sql arrays json

我正在查询SQL数据库并返回一些值。我所拥有的是Field1Field2,它们带有日期列表(最终可能有多达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);  

我现在要做的是更改Field1Field2的名称,而无需修改SQL查询,并且在将数组解析为JSON之前。

我通常只需要修改SQL;

Select Field1 as startdate, Field2 as enddate 

但这不是选项,因为要使用的值必须来自转换函数。

在最终输出中,字段1需要显示为

的输出。
lang('Field1');

此功能可根据用户在生成输出之前选择的内容,以33种语言之一翻译字段名称。

我可以使用类似的东西:

SELECT Field1 as ". lang('Field1') .", Field2 as ". lang('Field2') ."

,但希望使用PHP选项将语言值应用于数组中的所有键。如前所述,最终版本中可能有数百个字段,如果可以避免,我真的不想对每个可能的值进行硬编码。

有什么想法吗?

2 个答案:

答案 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,则在用新的键重建输出数组之前,将其替换为“时间”一词。

再次,非常感谢您的帮助!