Мне нужно вложить 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"] в первом цикле, он все равно не работает (обновит мой вопрос).
Я не вижу, где устанавливается $indicators, и это кажется важной частью проблемы.
Привет @BenHillier. Правда, мой код не полный (чтобы сохранить строки), но $indicators установлен. Я уже нашел свое решение. отредактирую мой вопрос.






<?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 за вашу помощь. Смотрите мое решение в моем вопросе.
Я узнал, что я должен был дать индекс. Мое решение:
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. // Какая структура у вас здесь на самом деле хочу, довольно неясно.