【问题标题】:Merge other key values in multidimentional array if particular key values match合并特定键值匹配的多维数组中的其他键值
【发布时间】:2018-02-06 17:08:40
【问题描述】:

我有一个多维数组,其中有几组值。如果键“name”的值匹配,我在这里要做的是合并键值“marks”和“course”。到目前为止,我已经完成了如下操作来删除重复项:

$multi = array(
   array("name" => "Michael", "marks" => "25, 27, 34", "course" => "ABC"),
   array("name" => "Kumar", "marks" => "59, 71, 38", "course" => "DEF"),
   array("name" => "Peter", "marks" => "94, 43, 61", "course" => "JKL"),
   array("name" => "Kumar", "marks" => "83, 57, 73", "course" => "GHI"),
  );

$multiTemp = $multiNew = array();
foreach($multi as $key=>$val){
  if(array_key_exists($val['name'], $multiTemp) ) {
    continue;
  }
  $multiTemp[$val['name']] = 1;
  $multiNew[] = $val;
}

echo "<pre>";
print_r($multiNew);
echo "</pre>";

它只是删除重复的值。有没有办法根据我在代码上面提到的条件合并其他两个值?就像数组$multi 中的第二个和第四个数组为name 携带相同的值,所以我希望将markscourse 合并为一个。提前感谢您的帮助。

电流输出:

Array
(
    [0] => Array
        (
            [name] => Michael
            [marks] => 25, 27, 34
            [course] => ABC
        )

    [1] => Array
        (
            [name] => Kumar
            [marks] => 59, 71, 38
            [course] => DEF
        )

    [2] => Array
        (
            [name] => Peter
            [marks] => 94, 43, 61
            [course] => JKL
        )

)

预期输出:

Array
(
    [0] => Array
        (
            [name] => Michael
            [marks] => 25, 27, 34
            [course] => ABC
        )

    [1] => Array
        (
            [name] => Kumar
            [marks] => 59, 71, 38, 83, 57, 73
            [course] => DEF, GHI
        )

    [2] => Array
        (
            [name] => Peter
            [marks] => 94, 43, 61
            [course] => JKL
        )

)

【问题讨论】:

  • 发布最终预期结果
  • 你好,RomanPerekhrest。这里是: Array ( [0] => Array ( [name] => Michael [marks] => 25, 27, 34 [course] => ABC ) [1] => Array ( [name] => Kumar [标记] => 59, 71, 38, 83, 57, 73 [课程] => DEF, GHI ) [2] => 数组 ( [名称] => 彼得 [标记] => 94, 43, 61 [课程] => JKL ) )
  • 也编辑了问题,以添加预期的输出

标签: php arrays multidimensional-array


【解决方案1】:

array_reduce() + arrray_values() 解决方案:

$multi = [
   ["name" => "Michael", "marks" => "25, 27, 34", "course" => "ABC"],
   ["name" => "Kumar", "marks" => "59, 71, 38", "course" => "DEF"],
   ["name" => "Peter", "marks" => "94, 43, 61", "course" => "JKL"],
   ["name" => "Kumar", "marks" => "83, 57, 73", "course" => "GHI"]
];

$result = array_values(array_reduce($multi, function($r, $a){
    $name = $a['name'];
    if (isset($r[$name])){
        $r[$name]['marks'] .= ', ' . $a['marks'];
        $r[$name]['course'] .= ', ' . $a['course'];
    } else {
        $r[$name] = $a;
    }
    return $r;
}, []));

print_r($result);

输出:

Array
(
    [0] => Array
        (
            [name] => Michael
            [marks] => 25, 27, 34
            [course] => ABC
        )

    [1] => Array
        (
            [name] => Kumar
            [marks] => 59, 71, 38, 83, 57, 73
            [course] => DEF, GHI
        )

    [2] => Array
        (
            [name] => Peter
            [marks] => 94, 43, 61
            [course] => JKL
        )
)

http://php.net/manual/en/function.array-reduce.php

【讨论】:

  • 这正是我所需要的,非常感谢 Roman!非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多