Php,根据key缺失值创建新数组

时间:2017-12-01 16:34:43

标签: php arrays

我有一个多维数组:

$array = array(
    array(
        "name" => "one",
        "date" => "2016-10-10",
        "data"=> 30
    ),
    array(
        "name" => "one",
        "date" => "2016-10-11",
        "data"=> 30
    ),
    array(
        "name" => "two",
        "date" => "2016-10-10",
        "data"=> 40
    )
);

现在我想合并数组的差异,比如数组(name => one)有两个日期(2016-10-10和2016-10-10)但是数组(name => two)有只有一个日期(2016-10-10),我想用数组添加2016-10-11(name => two)。

array(
    "name" => "two",
    "date" => "2016-10-11",
    "data"=> 0
)

1 个答案:

答案 0 :(得分:1)

我可能没有想到更简单的方法,但我认为解决方案看起来需要三个步骤。

  1. 按日期对您的值进行分组

    foreach ($array as $row) {
        $dates[$row['date']][$row['name']] = $row['data'];
    }
    
  2. 获取所有名称的唯一列表

    $names = array_unique(array_column($array, 'name'));
    
  3. 迭代日期组并将缺失的值填充到原始数组中。

    foreach ($dates as $date => $date_names) {
        foreach ($names as $name) {
            if (!isset($date_names[$name])) {
                $array[] = ['name' => $name, 'date' => $date, 'data' => 0];
            }
        }
    }
    
  4. (如果按名称分组并获得唯一的日期列表,这也应该相同。)