繁体   English   中英

PHP根据条件设置变量

[英]PHP set Variable based on condition

如果帖子标题与下面的问题无关,我感到很抱歉。 困惑如何给它。

示例我有下面的数据表:

DEPARTMENT_ID_FK | EMAIL_ADDRESS
001              | a@example.com
002              | b@example.com
001              | c@example.com

当我查询它时,是否可以这样设置:
如果相同DEPARTMENT_ID_FK,则将其显示为基于DEPARTMENT_ID_FK的变量组合值

while($dData = oci_fetch_array($q))
{
     $email = $dData['EMAIL_ADDRESS']; // I know when I echoing this variable, it will be like : a@example.comb@example.comc@example.com
}

我想要的是循环,我们可以知道是否:

DEPARTMENT_ID_FK | EMAIL_ADDRESS
001              | a@example.com, c@example.com
002              | b@example.com

任何帮助,将不胜感激。

您可以让Oracle为您做汇总

甲骨文11

SELECT DEPARTMENT_ID_FK, 
       LISTAGG(EMAIL_ADDRESS, ',') 
           WITHIN GROUP (ORDER BY EMAIL_ADDRESS) AS EMAIL_ADDRESS
  FROM table1
 GROUP BY DEPARTMENT_ID_FK

甲骨文10

SELECT DEPARTMENT_ID_FK, 
       RTRIM(XMLAGG(XMLELEMENT(e, EMAIL_ADDRESS, ',') 
           ORDER BY EMAIL_ADDRESS).EXTRACT('//text()').GETCLOBVAL(), ',') AS EMAIL_ADDRESS
  FROM table1
 GROUP BY DEPARTMENT_ID_FK

这是两个查询的dbfiddle演示

结果:

DEPARTMENT_ID_FK | EMAIL_ADDRESS
-----------------+----------------------------
001              | a@example.com,c@example.com
002              | b@example.com
-----------------+----------------------------

或者只是通过几个循环和一个条件聚合在php中

$agg = [];

while ($dData = oci_fetch_array($q)) {
    $dep = $dData['DEPARTMENT_ID_FK'];
    $email = $dData['EMAIL_ADDRESS'];

    if (isset($agg[$dep])) {
        $agg[$dep][] = $email;
        continue;
    }

    $agg[$dep] = [$email];
}

$result = [];

foreach ($agg as $dep => $emails) {
    $result[] = [
        'DEPARTMENT_ID_FK' => $dep,
        'EMAIL_ADDRESS' => implode(',', $emails),
    ];
}

print_r($result);

演示

结果:

Array
(
    [0] => Array
        (
            [DEPARTMENT_ID_FK] => 001
            [EMAIL_ADDRESS] => a@example.com,c@example.com
        )

    [1] => Array
        (
            [DEPARTMENT_ID_FK] => 002
            [EMAIL_ADDRESS] => a@example.com
        )

)

实现目标的简单方法。

$email = array(); while($dData = oci_fetch_array($q)) { $email[$dData['DEPARTMENT_ID_FK']] = (isset($email[$dData['DEPARTMENT_ID_FK']]) && $email[$dData['DEPARTMENT_ID_FK']] != '' ? ', ' : '').$dData['EMAIL_ADDRESS']; } foreach ($email as $key=>$val){ echo $key . ' => '. $val; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM