Как вложить 3 массива в php

Мне нужно вложить 3 arrays (поэтому первый array содержит array, который также содержит array). У меня есть успех с 2 arrays, но я не могу заставить 3 работать.

У меня был мой код, работающий с 2 ​​arrays (который работал просто отлично), но я не могу вложить 3 arrays.

Мой текущий код:

if (!empty($sections)) {
    foreach ($sections as $d) {
        $row_array = array();
        $row_array["id"] = intval($d["id"]);
        $row_array["sname"] = $d["sname"];
        $row_array["sicon"] = $d["sicon"];
        $row_array["perc"] = intval($d["perc"]);
        $row_array["pvalue"] = intval($d["pvalue"]);
        $row_array["vfixed"] = intval($d["vfixed"]);
        $row_array["sectionValues"] = array();
        array_push($row_array["sectionValues"],
            intval($d["perc"]),
            intval($d["id"]),
            0
        );
        $row_array["sectionIndicators"] = array();
        //loop indicators
        if (!empty($indicators)) {
            foreach ($indicators as $v) {
                if ($d["id"] == $v["idsec"]) {
                    /*$row_array["sectionIndicators"][] = array(
                        "iid" => intval($v["iid"]),
                        "iname" => $v["iname"],
                        "perc" => intval($v["perc"]),
                        "pvalue" => intval($v["pvalue"]),
                        "vfixed" => intval($v["vfixed"])
                    );*/
                    $row_array["sectionIndicators"]["iid"] = intval($v["iid"]);
                    $row_array["sectionIndicators"]["iname"] = $v["iname"];
                    $row_array["sectionIndicators"]["perc"] = intval($v["perc"]);
                    $row_array["sectionIndicators"]["pvalue"] = intval($v["pvalue"]);
                    $row_array["sectionIndicators"]["vfixed"] = intval($v["vfixed"]);
                    $row_array["sectionIndicators"]["finalArray"] = array();
                }
            }
        }
        array_push($data, $row_array);
    }
}

Часть, которую я закомментировал, является моей рабочей частью (с двумя массивами). Новая часть работает, но содержит только последнюю строку $indicators, поэтому кажется, что цикл не работает таким образом.

$row_array["sectionIndicators"]["finalArray"] = array(); будет содержать последний вложенный array.

Любая помощь горячо приветствуется.

РЕШЕНИЕ

Я узнал, что я должен был дать индекс. Мое решение:

if (!empty($sections)) {
    foreach ($sections as $d) {
        $row_array = array();
        $row_array["id"] = intval($d["id"]);
        $row_array["sname"] = $d["sname"];
        $row_array["sicon"] = $d["sicon"];
        $row_array["perc"] = intval($d["perc"]);
        $row_array["pvalue"] = intval($d["pvalue"]);
        $row_array["vfixed"] = intval($d["vfixed"]);
        $row_array["sectionValues"] = array();
        array_push($row_array["sectionValues"],
            intval($d["perc"]),
            intval($d["id"]),
            0
        );
        $row_array["sectionIndicators"] = array();
        //loop indicators
        if (!empty($indicators)) {
            $i=-1;
            foreach ($indicators as $v) {
                if ($d["id"] == $v["idsec"]) {
                    $i++;
                    $row_array["sectionIndicators"][$i]["iid"] = intval($v["iid"]);
                    $row_array["sectionIndicators"][$i]["iname"] = $v["iname"];
                    $row_array["sectionIndicators"][$i]["perc"] = intval($v["perc"]);
                    $row_array["sectionIndicators"][$i]["pvalue"] = intval($v["pvalue"]);
                    $row_array["sectionIndicators"][$i]["vfixed"] = intval($v["vfixed"]);
                    $row_array["sectionIndicators"][$i]["finalArray"] = array();
                    array_push($row_array["sectionIndicators"][$i]["finalArray"],
                        intval($v["perc"]),
                        intval($d["id"]),
                        intval($v["iid"])
                    );
                }
            }
        }
        array_push($data, $row_array);
    }
}

Вы перезаписываете $row_array["sectionIndicators"] новым пустым массивом на каждой итерации этого внутреннего цикла foreach. // Какая структура у вас здесь на самом деле хочу, довольно неясно.

04FS 17.06.2019 09:22

Это моя ошибка. когда я устанавливаю $row_array["sectionIndicators"] в первом цикле, он все равно не работает (обновит мой вопрос).

dexter 17.06.2019 09:28

Я не вижу, где устанавливается $indicators, и это кажется важной частью проблемы.

Ben Hillier 17.06.2019 09:40

Привет @BenHillier. Правда, мой код не полный (чтобы сохранить строки), но $indicators установлен. Я уже нашел свое решение. отредактирую мой вопрос.

dexter 17.06.2019 09:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

<?php

// Assumption that your array is like this :
$sections = [0 => ['id'=>1, 'sname'=>'Sname', 'sicon'=>'SIcon', 'perc'=>'Perc', 'pvalue'=>'Pvalue', 'vfixed'=>'Vfixed'], 1 => ['id'=>2, 'sname'=>'Sname2', 'sicon'=>'SIcon2', 'perc'=>'Perc2', 'pvalue'=>'Pvalue2', 'vfixed'=>'Vfixed2']];
$indicators = [ 0 => ['idsec'=>1, 'iid'=>1, 'iname'=>'viname', 'perc'=>'vperc', 'pvalue'=>'vpvalue', 'vfixed'=>'vVfixed'], 1 => ['idsec'=>2, 'iid'=>2, 'iname'=>'viname2', 'perc'=>'vperc2', 'pvalue'=>'vpvalue2', 'vfixed'=>'vVfixed2']];

// Initialisation your result array
$data = [];

if (!empty($sections)) {
    foreach ($sections as $d) {
        $row_array = array();
        $row_array["id"] = intval($d["id"]);
        $row_array["sname"] = $d["sname"];
        $row_array["sicon"] = $d["sicon"];
        $row_array["perc"] = intval($d["perc"]);
        $row_array["pvalue"] = intval($d["pvalue"]);
        $row_array["vfixed"] = intval($d["vfixed"]);
        $row_array["sectionValues"] = array();
        array_push($row_array["sectionValues"],
            intval($d["perc"]),
            intval($d["id"]),
            0
        );
        //loop indicators
        if (!empty($indicators)) {
            foreach ($indicators as $v) {
                if ($d['id'] == $v['idsec']) {
                    $row_array["sectionIndicators"] = array();
                    $row_array["sectionIndicators"][] = array(
                        "iid" => intval($v["iid"]),
                        "iname" => $v["iname"],
                        "perc" => intval($v["perc"]),
                        "pvalue" => intval($v["pvalue"]),
                        "vfixed" => intval($v["vfixed"])
                    );
                    $row_array["sectionIndicators"]["iid"] = intval($v["iid"]);
                    $row_array["sectionIndicators"]["iname"] = $v["iname"];
                    $row_array["sectionIndicators"]["perc"] = intval($v["perc"]);
                    $row_array["sectionIndicators"]["pvalue"] = intval($v["pvalue"]);
                    $row_array["sectionIndicators"]["vfixed"] = intval($v["vfixed"]);
                    $row_array["sectionIndicators"]["finalArray"] = array();
                }
            }
        }
        array_push($data, $row_array);
    }
}

echo '<pre>';
print_r( $data );

Результат :

Array
(
    [0] => Array
        (
            [id] => 1
            [sname] => Sname
            [sicon] => SIcon
            [perc] => 0
            [pvalue] => 0
            [vfixed] => 0
            [sectionValues] => Array
                (
                    [0] => 0
                    [1] => 1
                    [2] => 0
                )

            [sectionIndicators] => Array
                (
                    [0] => Array
                        (
                            [iid] => 1
                            [iname] => viname
                            [perc] => 0
                            [pvalue] => 0
                            [vfixed] => 0
                        )

                    [iid] => 1
                    [iname] => viname
                    [perc] => 0
                    [pvalue] => 0
                    [vfixed] => 0
                    [finalArray] => Array
                        (
                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [sname] => Sname2
            [sicon] => SIcon2
            [perc] => 0
            [pvalue] => 0
            [vfixed] => 0
            [sectionValues] => Array
                (
                    [0] => 0
                    [1] => 2
                    [2] => 0
                )

            [sectionIndicators] => Array
                (
                    [0] => Array
                        (
                            [iid] => 2
                            [iname] => viname2
                            [perc] => 0
                            [pvalue] => 0
                            [vfixed] => 0
                        )

                    [iid] => 2
                    [iname] => viname2
                    [perc] => 0
                    [pvalue] => 0
                    [vfixed] => 0
                    [finalArray] => Array
                        (
                        )

                )

        )

)

Tnx за вашу помощь. Смотрите мое решение в моем вопросе.

dexter 17.06.2019 09:44
Ответ принят как подходящий

Я узнал, что я должен был дать индекс. Мое решение:

if (!empty($sections)) {
    foreach ($sections as $d) {
        $row_array = array();
        $row_array["id"] = intval($d["id"]);
        $row_array["sname"] = $d["sname"];
        $row_array["sicon"] = $d["sicon"];
        $row_array["perc"] = intval($d["perc"]);
        $row_array["pvalue"] = intval($d["pvalue"]);
        $row_array["vfixed"] = intval($d["vfixed"]);
        $row_array["sectionValues"] = array();
        array_push($row_array["sectionValues"],
            intval($d["perc"]),
            intval($d["id"]),
            0
        );
        $row_array["sectionIndicators"] = array();
        //loop indicators
        if (!empty($indicators)) {
            $i=-1;
            foreach ($indicators as $v) {
                if ($d["id"] == $v["idsec"]) {
                    $i++;
                    $row_array["sectionIndicators"][$i]["iid"] = intval($v["iid"]);
                    $row_array["sectionIndicators"][$i]["iname"] = $v["iname"];
                    $row_array["sectionIndicators"][$i]["perc"] = intval($v["perc"]);
                    $row_array["sectionIndicators"][$i]["pvalue"] = intval($v["pvalue"]);
                    $row_array["sectionIndicators"][$i]["vfixed"] = intval($v["vfixed"]);
                    $row_array["sectionIndicators"][$i]["finalArray"] = array();
                    array_push($row_array["sectionIndicators"][$i]["finalArray"],
                        intval($v["perc"]),
                        intval($d["id"]),
                        intval($v["iid"])
                    );
                }
            }
        }
        array_push($data, $row_array);
    }
}

Другие вопросы по теме