php 修改查询结果集中每一行的键

ktca8awb  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(91)

我正在查询一个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);

我现在要做的是在不修改SQL查询的情况下,在数组被解析为JSON之前,更改Field1Field2的名称。
我通常只修改SQL;

Select Field1 as startdate, Field2 as enddate

但这不是一个选项,因为要使用的值必须来自转换函数。
在最终输出中,Field 1需要显示为

lang('Field1');

此函数根据用户在生成输出之前选择的语言,将字段名称翻译为33种语言中的一种。
我可以使用类似的东西:

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

但我更喜欢PHP选项,它将语言值应用于数组中的所有键。如前所述,在最终版本中可能有数百个字段,如果可以避免,我真的不想硬编码每个可能的值。
有什么想法吗?

ca1c2owp

ca1c2owp1#

如果我没理解错的话,你能用这个吗?

$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);
col17t5w

col17t5w2#

再次感谢罗恩为我指明了正确的方向。

$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);
}

数组被循环,如果Field 1出现在其中,它会被替换为单词'Time',然后用新的键重建输出数组。
再次感谢您的帮助!

相关问题