1

我有两个不同的数组

阵列 1:

$result = array(
    "2018-08-30" => 8
    "2018-08-31" => 2
    "2018-09-04" => 4
    "2018-09-20" => 1
    "2018-09-24" => 1
    "2018-09-27" => 2
  );

阵列 2

$dateRanges = array(
  "2018-08-28" => 0
  "2018-08-29" => 1
  "2018-08-30" => 2
  "2018-08-31" => 3
  "2018-09-01" => 4
  "2018-09-02" => 5
  "2018-09-03" => 6
  "2018-09-04" => 7
  "2018-09-05" => 8
  "2018-09-06" => 9
  "2018-09-07" => 10
  "2018-09-08" => 11
  "2018-09-09" => 12
  "2018-09-10" => 13
  "2018-09-11" => 14
  "2018-09-12" => 15
  "2018-09-13" => 16
  "2018-09-14" => 17
  "2018-09-15" => 18
  "2018-09-16" => 19
  "2018-09-17" => 20
  "2018-09-18" => 21
  "2018-09-19" => 22
  "2018-09-20" => 23
  "2018-09-21" => 24
  "2018-09-22" => 25
  "2018-09-23" => 26
  "2018-09-24" => 27
  "2018-09-25" => 28
  "2018-09-26" => 29
  "2018-09-27" => 30
);

我已经将array_flip 用于第二个数组($dateRanges),所以请不要对序列中给出的值感到困惑。

我想将日期的值从 Array1 分配给 Array2;

预期结果 :

$dateRanges = array(
  "2018-08-28" => 0
  "2018-08-29" => 0
  "2018-08-30" => 8
  "2018-08-31" => 2
  "2018-09-01" => 0
  "2018-09-02" => 0
  "2018-09-03" => 0
  "2018-09-04" => 4
  "2018-09-05" => 0
  "2018-09-06" => 0
  "2018-09-07" => 0
  "2018-09-08" => 0
  "2018-09-09" => 0
  "2018-09-10" => 0
  "2018-09-11" => 0
  "2018-09-12" => 0
  "2018-09-13" => 0
  "2018-09-14" => 0
  "2018-09-15" => 0
  "2018-09-16" => 0
  "2018-09-17" => 0
  "2018-09-18" => 0
  "2018-09-19" => 0
  "2018-09-20" => 1
  "2018-09-21" => 0
  "2018-09-22" => 0
  "2018-09-23" => 0
  "2018-09-24" => 1
  "2018-09-25" => 0
  "2018-09-26" => 0
  "2018-09-27" => 2
);

我已经使用 foreach 循环完成了这项工作,我正在检查我的日期是否存在于$dateRanges数组中,但我想知道是否有任何快捷方式,如使用array_columnarray_combinearray_walk函数。

谢谢

4

2 回答 2

2

您可以使用array_map()和的组合array_merge()

$newArr = array_merge(array_map(function($v){return 0;}, $dateRanges), $result);

在演示中检查结果

于 2018-09-27T13:10:52.130 回答
1

以下应该可以工作,如果不存在值,则从$array1to复制值$array2或设置。我尚未测试此代码,因此可能需要进行一些调整。0

$array1 = array(/*...*/);
$array2 = array(/*...*/);
array_walk($array2, function (&$v, $k) use ($array1) {
    if (isset($array1[$k]))
        $v = $array1[$k];
    else
        $v = 0;
});
于 2018-09-27T13:07:58.450 回答