【问题标题】:Dynamic merge on multi-dimensional array in phpphp中多维数组的动态合并
【发布时间】:2014-09-15 06:35:40
【问题描述】:

我有一些多维数组需要合并,同时保留其中的一些值。

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 上实现它。

【问题讨论】:

  • 在您的第一个示例数组中,这是在另一个包含它们的父数组中吗?还是这些单独的数组?
  • [diagnosa] 数组与 [diagnosa_id] 和 [jeniskelamin] 一起位于它的父数组中。是的,它们在另一个包含它们的父数组中。
  • 好的,我在下面回答,还加了一个小提琴

标签: php arrays multidimensional-array array-merge


【解决方案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
}

Fiddle

【讨论】:

    【解决方案2】:

    如果你合并两个数组试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 2014-10-31
      相关资源
      最近更新 更多