Динамическое слияние на многомерном массиве в Stack Overflow

У меня есть некоторый многомерный массив, который нужно объединить, сохранив некоторые из его значений.

Array
(
[diagnosa_id] => 6
[jeniskelamin] => LAKI-LAKI
[diagnosa] => Array
(
[0] => Array
(
[diagnosa_kode] => A01.0
[jeniskelamin] => LAKI-LAKI
[pasienhidupmati] => HIDUP
[diagnosa_nama] => Demam tifoid
[jmlpasien] => 1
)

[4] => Array
(
[diagnosa_kode] => A01.0
[jeniskelamin] => LAKI-LAKI
[pasienhidupmati] => HIDUP
[diagnosa_nama] => Demam tifoid
[jmlpasien] => 1
)

)

)

Array
(
[diagnosa_id] => 1
[jeniskelamin] => LAKI-LAKI
[diagnosa] => Array
(
[1] => Array
(
[diagnosa_kode] => A00
[jeniskelamin] => LAKI-LAKI
[pasienhidupmati] => HIDUP
[diagnosa_nama] => Kolera
[jmlpasien] => 1
)

[2] => Array
(
[diagnosa_kode] => A00
[jeniskelamin] => LAKI-LAKI
[pasienhidupmati] => HIDUP
[diagnosa_nama] => Kolera
[jmlpasien] => 1
)

)

)

Array
(
[diagnosa_id] => 7
[jeniskelamin] => LAKI-LAKI
[diagnosa] => Array
(
[3] => Array
(
[diagnosa_kode] => A01.1
[jeniskelamin] => LAKI-LAKI
[pasienhidupmati] => HIDUP
[diagnosa_nama] => Demam paratifoid A
[jmlpasien] => 1
)

)

)

Как видите, первые два массива имеют схожие данные на [diagnosa] массив. Мне нужно объединить массив внутри [diagnosa] массив.

Так что, если массив внутри него имеет то же значение на это [diagnosa_kode], [jeniskelamin], [pasienhidupmati], а также [diagnosa_nama]затем следует добавить [jmlpasien] значение, сохраняя при этом другое значение.

Например, в первом массиве результат должен быть таким:

Array
(
[diagnosa_id] => 6
[jeniskelamin] => LAKI-LAKI
[diagnosa] => Array
(
[0] => Array
(
[diagnosa_kode] => A01.0
[jeniskelamin] => LAKI-LAKI
[pasienhidupmati] => HIDUP
[diagnosa_nama] => Demam tifoid
[jmlpasien] => 2
)

)

)

Извините, если это слишком сложно, но я просто не могу понять, как реализовать это на php.

1

Решение

Да, вы можете сделать это, вам просто нужен временный держатель для группировки, а затем после слияния вы можете вернуть их обратно. Пример:

foreach ($array as &$value) {
$diagnosa = $value['diagnosa'];
$temp = array(); // initialize the temp holder
foreach($diagnosa as $d) {
$name = "$d[diagnosa_kode] - $d[jeniskelamin] - $d[pasienhidupmati]"; // create a grouping index
if(!isset($temp[$name])) {
$temp[$name] = $d; // simple group initialization
} else {
$temp[$name]['jmlpasien'] += $d['jmlpasien']; // if its there already, just added them up
}
}
$diagnosa = array_values($temp); // simple reindexing
$value['diagnosa'] = $diagnosa; // overwrite the values
}

скрипка

2

Другие решения

если вы объединяете оба массива, попробуйте это:

$final_array =array();
foreach ($data as $val)
{
foreach($val as $val2)
{
$final_array[] = $val2;
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector