首页 > 解决方案 > 如何将两个数组合二为一?

问题描述

我有两个需要加入的安排有问题,我的意图如下,通过使用 PHP 查询 MySQL,我恢复了我所有注册公司的名称和所述公司每个月的收入:

这是我的查询:

$totalEmpresas = $db->rawQuery('SELECT fecha, SUM(total) AS ingresosTotal from ingresos 
where YEAR(fecha) = "2021" AND ingresos.id_rol = ? AND ingresos.id_usuario = ? AND ingresos.empresa = ? 
GROUP BY MONTH(fecha)', Array ($idRolUser, $idUser, $idEmpresa));

此查询返回一个数组,该数组按每个咨询公司的所有可用月份分组,这是它返回的数组示例:

Array
(
    [0] => Array
        (
            [fecha] => 2021-01-08
            [ingresosTotal] => 158181.17
        )

    [1] => Array
        (
            [fecha] => 2021-02-05
            [ingresosTotal] => 781595.14
        )

    [2] => Array
        (
            [fecha] => 2021-03-05
            [ingresosTotal] => 345094.65
        )

    [3] => Array
        (
            [fecha] => 2021-04-09
            [ingresosTotal] => 166694.76
        )

    [4] => Array
        (
            [fecha] => 2021-05-26
            [ingresosTotal] => 155874.65
        )

    [5] => Array
        (
            [fecha] => 2021-06-04
            [ingresosTotal] => 159801.81
        )

    [6] => Array
        (
            [fecha] => 2021-07-02
            [ingresosTotal] => 161689.9
        )

)

这就是我遇到的问题,我的意图是形成一个具有以下结构的数组:

data:[
   {
     empresa = Empresa Ejemplo 1,
     2021-02-05 = 781595.14,
     2021-03-05 = 345094.65,
     2021-04-09 = 166694.76,
     2021-05-26 = 155874.65,
     2021-06-04 = 159801.81,
     2021-07-02 = 161689.9   
   },
   {
     empresa = Empresa Ejemplo 2,
     2021-02-05 = 781595.14,
     2021-03-05 = 345094.65,
     2021-04-09 = 166694.76,
     2021-05-26 = 155874.65,
     2021-06-04 = 159801.81,
     2021-07-02 = 161689.9   
   }
]

问题是我的公司和我的日期在两个单独的数组中,如果带有 array_push 的数组如下:

{"data":[
    {
       "Empresa":"Empresa Ejemplo 1",
       "Fechas":[
          {"January":158181.17},
          {"February":781595.14},
          {"March":345094.65},
          {"April":166694.76},
          {"May":155874.65},
          {"June":159801.81},
          {"July":161689.9}
       ]
     }

我尝试在 foreach 中使用 array_push 但这不起作用,这是我的代码:

function MensualIngreso($idRolUser, $idUser){

        require_once ("../vendor/thingengineer/mysqli-database-class/MysqliDb.php");
        $db = new MysqliDb (DB_HOST, DB_USERNAME, '', DB_NAME);

        // Debemos cosultar los ingresos de las empresas globalmente y por mes
        // 1.- Seleccionaremos todas las empresas por rol y id de usuario

        $db->where ("id_rol", $idRolUser);
        $db->where ("id_usuario", $idUser);
        $empresas = $db->get ("empresas");

        // 2.- Por cada de una de las empresas recorreremos los meses que ha pagado

        $aura = [];
        $data['data'] = [];

        foreach ($empresas as $key => $value) {
            
            $idEmpresa = $value['id_empresa'];
            $empresa = $value['empresa'];
            $fechas = [];

            $totalEmpresas = $db->rawQuery('SELECT fecha, SUM(total) AS ingresosTotal from ingresos 
            where YEAR(fecha) = "2021" AND ingresos.id_rol = ? AND ingresos.id_usuario = ? AND ingresos.empresa = ? GROUP BY MONTH(fecha)', Array ($idRolUser, $idUser, $idEmpresa));

            //print_r($totalEmpresas);
            //return;

            foreach ($totalEmpresas as $key => $value) {
                
                array_push($fechas, array(strftime("%B", strtotime( $value['fecha'] )) => $value['ingresosTotal']) );                

            }

            //print_r($fechas);

            $consulta = array(
                "Empresa" => $empresa,
                "Fechas" => $fechas
            );

            array_push($data['data'], $consulta);          

        }

        //print_r($data);

        return $data;

    }

标签: javascriptphparraysdatatable

解决方案


我认为您的主要问题之一可能是您试图从中获取月份,$value['fecha_aportacion']但 SQL 查询中似乎不存在该月份。我认为它应该只是$value['fecha']

我认为这可以满足您的需求:

$array = [
    [
        'fecha' => '2021-01-08',
        'ingresosTotal' => '158181.17',
    ], 
    [
        'fecha' => '2021-02-05',
        'ingresosTotal' => '781595.14',
    ],
    [
        'fecha' => '2021-03-05',
        'ingresosTotal' => '345094.65',
    ],
    [
        'fecha' => '2021-04-09',
        'ingresosTotal' => '166694.76',
    ],
    [
        'fecha' => '2021-05-26',
        'ingresosTotal' => '155874.65',
    ],
    [
        'fecha' => '2021-06-04',
        'ingresosTotal' => '159801.81',
    ],
    [
        'fecha' => '2021-07-02',
        'ingresosTotal' => '161689.9',
    ],
];

$empresa = 'empresa ejemplo 1';

$fechas = [];
$fechas['empresa'] = $empresa;

foreach ($array as $value) {
    $fecha = strftime("%B", strtotime( $value['fecha'] ));
    $fechas[$fecha] = $value['ingresosTotal'];
}

echo json_encode($fechas, JSON_PRETTY_PRINT);

输出:

{
    "empresa": "empresa ejemplo 1",
    "January": "158181.17",
    "February": "781595.14",
    "March": "345094.65",
    "April": "166694.76",
    "May": "155874.65",
    "June": "159801.81",
    "July": "161689.9"
}

推荐阅读