Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果键不';不匹配?_Php_Arrays_Interpolation - Fatal编程技术网

Php 如果键不';不匹配?

Php 如果键不';不匹配?,php,arrays,interpolation,Php,Arrays,Interpolation,我正在寻找一个函数,将两个或多个数组合并到一个输出数组中,以便在图形上使用。X轴(数组键)是日期,Y轴是美元(数组值)。有时日期/键可能匹配,也可能不匹配。此外,长度或数组可能不相同。我已经找到了当按键匹配时如何执行此操作的示例: 但是当它们不匹配时,我想插值。 我把这张图放在一起,作为我试图得到的输入和输出的一个例子 2个红色输入阵列为: $a1 = array( "2019-01-01" => 0 ,"2019-01-15" => 1000 ,"201

我正在寻找一个函数,将两个或多个数组合并到一个输出数组中,以便在图形上使用。X轴(数组键)是日期,Y轴是美元(数组值)。有时日期/键可能匹配,也可能不匹配。此外,长度或数组可能不相同。我已经找到了当按键匹配时如何执行此操作的示例: 但是当它们不匹配时,我想插值。 我把这张图放在一起,作为我试图得到的输入和输出的一个例子

2个红色输入阵列为:

$a1 = array(
     "2019-01-01" => 0
    ,"2019-01-15" => 1000
    ,"2019-02-05" => 2000
    ,"2019-02-19" => 4000
);

$a2 = array(
     "2019-01-22" => 0
    ,"2019-02-05" => 1000
    ,"2019-02-12" => 2000
    ,"2019-02-26" => 3000
);
Array
(
    [2019-01-01] => 0
    [2019-01-15] => 1000
    [2019-01-22] => 1333
    [2019-02-05] => 3000
    [2019-02-12] => 5000
    [2019-02-19] => 6500
    [2019-02-26] => 7000
)
蓝色的输出阵列是:

$a1 = array(
     "2019-01-01" => 0
    ,"2019-01-15" => 1000
    ,"2019-02-05" => 2000
    ,"2019-02-19" => 4000
);

$a2 = array(
     "2019-01-22" => 0
    ,"2019-02-05" => 1000
    ,"2019-02-12" => 2000
    ,"2019-02-26" => 3000
);
Array
(
    [2019-01-01] => 0
    [2019-01-15] => 1000
    [2019-01-22] => 1333
    [2019-02-05] => 3000
    [2019-02-12] => 5000
    [2019-02-19] => 6500
    [2019-02-26] => 7000
)
我已经使用了插值函数:

echo getFeeFromDates('2019-1-15', 1000, '2019-2-5', 2000, '2019-1-22');

function getFeeFromDates ($date1, $fee1, $date2, $fee2, $getDate) {

    $start = strtotime($date1);
    $end = strtotime($date2);
    $find = strtotime($getDate);

    $days_between = ceil(abs($end - $start) / 86400);
    $fee = abs($fee2 - $fee1);
    $feePerDay = $fee / $days_between;

    $findDays = ceil(abs($find - $start) / 86400);
    $myFee = number_format(($feePerDay * $findDays) + $fee1, 2);

    return $myFee;
}
这将返回1333.33作为2019-1-22日期的插值


我只是在绕着多个数组循环时遇到了麻烦&什么时候插值,什么时候仅仅添加值。任何帮助都将不胜感激。

您可以创建一个helper函数,该函数接受一个键/值数组和一个键数组,该数组返回一个键/值数组,该数组将包含第二个数组中的所有键,并在需要时插入值。密钥数组应包含第一个数组中存在的所有密钥,但可以包含更多(而不是更少):

现在有了这个函数,很容易得到想要的结果。假设您有
$a1
$a2
,如示例所示。然后做:

$keys = array_keys(array_merge($a1, $a2));
sort($keys);

$b1 = interpolate($a1, $keys);
$b2 = interpolate($a2, $keys);
foreach($b1 as $key => $value) {
    $sum[$key] = $value + $b2[$key];
}
$sum
将获得所需的结果

超过2个输入阵列 当您有一个这样的输入数组数组时,我们将其称为
$a
,然后您可以使用以下代码:

$keys = array_keys(array_merge(...$a));
sort($keys);
$b = array_map(function ($a1) use ($keys) {
    return interpolate($a1, $keys);
}, $a);

foreach($keys as $key) {
    $sum[$key] = array_sum(array_column($b, $key));
}

您是否尝试过这个
$C=array\u merge($a1,$a2);印刷品(丙元);非常感谢@trincot,这非常接近我要找的。我如何让它与更多的2个输入阵列一起工作?我想我应该能够向它传递一个数组,比如:
$bigArr=array($a1,$a2,$a3,$a4)
请参阅我的答案的补充。