簡體   English   中英

PHP - 在 Foreach 中創建多維數組

[英]PHP - Creating Multidimensional Array in Foreach

我有以下函數循環遍歷一系列實體以創建多維數組以返回 JSON:

public function calcularIndicadorBenchmark(int $idIndicador): array
{
    $indicador = $this->buscarPorId($idIndicador);
    $configGrupoBase = $this->entityManager->getRepository(ConfigGrupoBase::class)->findByIndicador($idIndicador);
    $configGrupo = $this->entityManager->getRepository(ConfigGrupo::class)->findByConfigBase(end($configGrupoBase)->getId());

    foreach ($configGrupo as $c) {
        $arrayGrupos[] = [
            'id' => $c->getId(),
            'nome' => $c->getNome(),
            'agrupamentos' => null
        ];

        $configGrupoAtributo = $this->entityManager->getRepository(ConfigGrupoAtributo::class)->findByConfigGrupo($c->getId());
        $agrupamento = $this->entityManager->getRepository(Agrupamento::class)->findByAtributo(end($configGrupoAtributo)->getId());

        foreach ($agrupamento as $a) {
            $arrayAgrupamentos[] = [
                'id' => $a->getId(),
                'nome' => $a->getNome(),
                'periodos' => null
            ];
        }
        $arrayGrupos[] = $arrayAgrupamentos;
    }

    $json['indicador'] = [
        'id' => $indicador->getId(),
        'nome' => $indicador->getNome(),
        'codigo' => $indicador->getCodigo(),
        'grupos' => $arrayGrupos
    ];
    return $json;
}

我的代碼沒有返回任何錯誤,但這並不是我期望/需要的。 Agrupamentos需要接收它下面的數組,我試圖讓它工作但不能。

{
    "indicador": {
        "id": 20,
        "nome": "Produtividade pessoal: Técnica",
        "codigo": "IN014",
        "grupos": [
            {
                "id": 1,
                "nome": "Até/Acima 125 mil exames ao mês",
                "agrupamentos": null
            },
            [
                {
                    "id": 1,
                    "nome": "até 5 milhões por mês",
                    "periodos": null
                },
                {
                    "id": 2,
                    "nome": "Acima de 5 milhões por mês",
                    "periodos": null
                }
            ],
            {
                "id": 99,
                "nome": "Teste",
                "agrupamentos": null
            },
            [
                {
                    "id": 1,
                    "nome": "até 5 milhões por mês",
                    "periodos": null
                },
                {
                    "id": 2,
                    "nome": "Acima de 5 milhões por mês",
                    "periodos": null
                }
            ]
        ]
    }
}

為了確保,這是我需要返回的結果,假設數據相同:

{
    "indicador":{
        "id":20,
        "nome":"Produtividade pessoal: Técnica",
        "codigo":"IN014"
    },
    "grupos":[
        {
            "id":1,
            "nome":"Até/Acima 125 mil exames ao mês",
            "agrupamentos":[
                {
                    "id":1,
                    "nome":"até 5 milhões por mês",

                },
                {
                    "id":2,
                    "nome":"Acima de 5 milhões por mês",

                }
            ]
        },
        {
            "id":99,
            "nome":"Teste",
            "agrupamentos":[
                {
                    "id":1,
                    "nome":"até 5 milhões por mês",
                    "periodos":null
                },
                {
                    "id":2,
                    "nome":"Acima de 5 milhões por mês",
                    "periodos":null
                }
            ]
        }
    ]
}

提前致謝,對偶爾的英語錯誤表示抱歉。

你不在$grupo['agrupamentos'][]推送數據,試試這個:

foreach ($configGrupo as $c) {

    // Variable created, easiest to handle
    $grupo = [
        'id' => $c->getId(),
        'nome' => $c->getNome(),
        'agrupamentos' => [] // Init with empty array
    ];

    //...

    foreach ($agrupamento as $a) {

        // Push each agrupamento to grupo agrupamentos
        $grupo['agrupamentos'][] = [ 
            'id' => $a->getId(),
            'nome' => $a->getNome(),
            'periodos' => null // Array too ?
        ];
    }

    $arrayGrupos[] = $grupo;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM