如何合并PHP多维数组,保持唯一键并用逗号分隔另一个值

时间:2015-09-11 14:38:18

标签: php arrays multidimensional-array

我有一个多维数组,我想让它匹配“唯一键”值但是合并另一个具有相同“唯一键”值的键,它可以用逗号表示,因为我的最终输出将是使用json_encode

例如,如果我有:

      [0]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "123"
      }
      [1]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "124"
      }
      [2]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "126"
      }
      [3]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "129"
      }
      [4]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "130"
      }
      [5]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "102"
      }
      [6]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "193"
      }
      [7]=>
      array(2) {
        ["label"]=>
        string(2) "AB"
        ["value"]=>
        string(8) "156"
      }
      [8]=>
      array(2) {
        ["label"]=>
        string(2) "BG"
        ["value"]=>
        string(8) "246"
      }
      [9]=>
      array(2) {
        ["label"]=>
        string(1) "C"
        ["value"]=>
        string(8) "234"
      }
      [10]=>
      array(2) {
        ["label"]=>
        string(1) "C"
        ["value"]=>
        string(8) "235"
      }
      [11]=>
      array(2) {
        ["label"]=>
        string(2) "CA"
        ["value"]=>
        string(8) "345"
      }
      [12]=>
      array(2) {
        ["label"]=>
        string(2) "CA"
        ["value"]=>
        string(8) "564"
     }

我想要一个输出:

  [0]=>
  array(2) {
    ["label"]=>
    string(2) "AB"
    ["value"]=>
    string "123,124,126,129,130,102,193,156“
  }
    [1]=>
  array(2) {
    ["label"]=>
    string(2) "BG"
    ["value"]=>
    string "246"
  }
  [2]=>
  array(2) {
    ["label"]=>
    string(1) "C"
    ["value"]=>
    string(8) "234,235,”
  }
  [3]=>
  array(2) {
    ["label"]=>
    string(2) "CA"
    ["value"]=>
    string(8) "345,564,”
  }

我不知道该怎么做,我调查了array_merge_recursive和其他类似的解决方案,但我没有得到它,也许我需要使用implode

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

$result = array();

foreach ($array as $arr) {
    if (!isset($result[$arr['label']])) {
        $result[$arr['label']] = $arr;
        continue;
    }

    $result[$arr['label']]['value'] .= ',' . $arr['value'];
}

// if you really need numeric indexes use:

$result = array_values($result);

答案 1 :(得分:0)

你可以尝试

$array = array(
    array(
        'label' => "AB",
        'value' => 123
    ),
    array(
        'label' => "AB",
        'value' => 124
    ),
    array(
        'label' => "AB",
        'value' => 125
    ),
    array(
        'label' => "C",
        'value' => 126
    ),
    array(
        'label' => "C",
        'value' => 127
    ),
    array(
        'label' => "C",
        'value' => 127
    ),
);

$result = array();
foreach ($array as $el) {
    $result[$el['label']] = array(
        'label' => $el['label'],
        'value' => implode( ',',
            array_unique(
                array_merge(
                    array_filter(
                        explode(',', $result[$el['label']]['value'])
                    ),
                    array($el['value'])
                )
            )
        )
    );
}

echo "<pre>"; var_dump(array_values($result));