PHP 数组与不同类型的键合并

标签 php mysql yii yii2

有什么方法可以将数组键与唯一名称合并,这样我就可以获得唯一键及其类型和值。我正在使用 yii2 和 mysql

我在 yii2 中使用以下 SQL 查询:

$data= $query->SELECT(["sum(no_of_pages) as pages_coded",'assigned_to','type_of_request','concat(firstname," ",lastname) as userfullname'])
->from('task')
->leftJoin('user','user.username = task.assigned_to')
->andWhere("sdlc_phase='Resolved'")
->orWhere("sdlc_phase='Semi_Resolved'");
$query->groupby(['assigned_to', 'type_of_request']);
//$query->->addGroupBy('assigned_to');
$query->orderby(['assigned_to'=>SORT_ASC]);
$data = $query->all();

SQL 查询的输出是

Array
(
    [0] => Array
        (
            [pages_coded] => 5
            [type_of_request] => Collector Tweak
            [userfullname] => Sam
        )
    [1] => Array
        (
            [pages_coded] => 5
            [type_of_request] => Collector Code
            [userfullname] => John
        )
    [2] => Array
        (
            [pages_coded] => 42
            [type_of_request] => Collector Tweak
            [userfullname] => John
        )
    [3] => Array
        (
            [pages_coded] => 37
            [type_of_request] => Clinical Tweak
            [userfullname] => Dona
        )
    [4] => Array
        (
            [pages_coded] => 35
            [type_of_request] => Collector Code
            [userfullname] => Dona
        )
    [5] => Array
        (
            [pages_coded] => 7
            [type_of_request] => Clinical Code
            [userfullname] => Ricky
        )
    [6] => Array
        (
            [pages_coded] => 50
            [type_of_request] => Clinical Tweak
            [userfullname] => Ricky
        )
    [7] => Array
        (
            [pages_coded] => 4
            [type_of_request] => Collector Code
            [userfullname] => Ricky
        )
    [8] => Array
        (
            [pages_coded] => 17
            [type_of_request] => Collector Tweak
            [userfullname] => Ricky
        )
)

但是我想要像这样生成输出,有没有办法得到这个

 Array
(
    [Sam] => Array
        (
            [0] => Clinical Code
            [1] => 0
            [2] => Clinical Tweak
            [3] => 0
            [4] => Collector Code
            [5] => 0
            [6] => Collector Tweak
            [7] => 5
        )
    [John] => Array
        (
            [0] => Clinical Code
            [1] => 0
            [2] => Clinical Tweak
            [3] => 0
            [4] => Collector Code
            [5] => 5
            [6] => Collector Tweak
            [7] => 42
        )
    [Dona] => Array
        (
            [0] => Clinical Code
            [1] => 0
            [2] => Clinical Tweak
            [3] => 37
            [4] => Collector Code
            [5] => 0
            [6] => Collector Tweak
            [7] => 35
        )
   [Ricky] => Array
        (
            [0] => Clinical Code
            [1] => 7
            [2] => Clinical Tweak
            [3] => 50
            [4] => Collector Code
            [5] => 4
            [6] => Collector Tweak
            [7] => 17
        )
)

帮我解决这个问题。

最佳答案

对于您想要的输出,您必须循环创建另一个数组的结果。

$output = array();
foreach ($data as $row) {
    $output[$row['userfullname']][$row['type_of_request']] = $row['pages_coded'];
}

像这样你最终会得到这样的数组:

$output = array(
    'Sam' => array(
        'Collector Tweak' => 5
    ),
);

并且由于您显然希望其他列在找不到时用 0 填充:

$categories = array(
    'Clinical Code' => 0,
    'Clinical Tweak' => 0,
    'Collector Code' => 0,
    'Collector Tweak' => 0,
);
foreach ($output as &$outputItem) {
    $outputItem = array_merge($categories, $outputItem);
}

根据定义,这更容易跟踪索引及其各自的值。

在这里测试:https://3v4l.org/0k40Q

关于PHP 数组与不同类型的键合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52046344/

相关文章:

php - 如何在 PHP 中使用 Switch 语句和 FORM Post 来更新、搜索和插入 SQL 数据库?

mysql - Mongodb 一个或两个集合?

php - 如何使用单个日期查询记录?

php - yii - 如何在 yii 1.1.13 中使用 nusoap 0.9.5 创建一个完全独立的扩展

php - 使用 CDbMigration 将当前时间插入 MySQL 表

php - 使用正则表达式管理电话号码验证漏洞

php - Laravel: fatal error :远程数据库耗尽内存字节

php - PHP可以将html命令写入另一个文件吗?

mysql - 如何级联手动删除

html - 将 Boilerplate 和 Bootstrap 与 CodeIgniter 或 Yii 集成