【问题标题】:Checking if a date is in between multiple date ranges in a multidimensional array in PHP检查日期是否在 PHP 中的多维数组中的多个日期范围之间
【发布时间】:2020-12-20 21:28:51
【问题描述】:

我尽力解决它,但我无法解决。如果您能在这方面帮助我,那就太好了。

我有这两个数组..

$firstarray — 它包含日期 [0] 和当天的产品成本 [1]。

[0] => Array (
    [0] => 2020-12-01
    [1] => 24.00
    )
[1] => Array (
    [0] => 2020-12-05
    [1] => 16.00
    )
[2] => Array (
    [0] => 2020-12-07
    [1] => 12.00
    )
[3] => Array (
    [0] => 2020-12-15
    [1] => 0.00
    )
[4] => Array (
    [0] => 2020-12-16
    [1] => 0.00
    )
[5] => Array (
    [0] => 2020-12-16
    [1] => 100.00
    )

$secondarray — 包含多个日期范围 [0] 和 [1],其中成本 [2] 在给定期间内异常不同。

[0] => Array (
    [0] => Array (
        [0] => 2020-12-01
        [1] => 2020-12-05
        [2] => 42.00
        )
    [1] => Array (
        [0] => 2020-12-06
        [1] => 2020-12-08
        [2] => 35.00
        )
    [2] => Array (
        [0] => 2020-12-09
        [1] => 2020-12-12
        [2] => 76.00
        )
    )
[1] => Array (
    [0] => Array (
        [0] => 2020-12-01
        [1] => 2020-12-05
        [2] => 42.00
        )
    [1] => Array (
        [0] => 2020-12-06
        [1] => 2020-12-08
        [2] => 35.00
        )
    [2] => Array (
        [0] => 2020-12-09
        [1] => 2020-12-12
        [2] => 76.00
        )
    )
[2] => Array (
    [0] => Array (
        [0] => 2020-12-04
        [1] => 2020-12-09
        [2] => 10.00
        )
    [1] => Array (
        [0] => 2020-12-10
        [1] => 2020-12-13
        [2] => 45.00
        )
    )
[3] => Array (
    [0] => Array (
        [0] => 2020-12-04
        [1] => 2020-12-09
        [2] => 10.00
        )
    [1] => Array (
        [0] => 2020-12-10
        [1] => 2020-12-13
        [2] => 45.00
        )
    )
[4] => Array (
    [0] => Array (
        [0] => 2020-12-04
        [1] => 2020-12-09
        [2] => 10.00
        )
    [1] => Array (
        [0] => 2020-12-10
        [1] => 2020-12-13
        [2] => 45.00
        )
    )
[5] => Array (
    [0] => Array (
        [0] => 2020-12-01
        [1] => 2020-12-05
        [2] => 42.00
        )
    [1] => Array (
        [0] => 2020-12-06
        [1] => 2020-12-08
        [2] => 35.00
        )
    [2] => Array (
        [0] => 2020-12-09
        [1] => 2020-12-12
        [2] => 76.00
        )
    )

我想检查 $firstarray 中的每个日期是否在 $secondarray 中的一个日期范围之间,如果是 - 从该日期范围的 $secondarray 中回显索引 [2] 处的值,如果不是 - echo $firstarray 中索引 [1] 处的值。

两个数组将始终具有相同的数字,在这种情况下为 5(foreach 循环应始终仅针对相同的索引进行),但数组的数量或其中的日期范围可以与众不同。

非常感谢!!

【问题讨论】:

  • 你尝试了什么?
  • 您要将$firstarray 中的每个日期与$secondarray 中的所有 范围进行比较,还是仅比较相应索引的范围?
  • 嗨,尼克,不仅适用于相应索引中的日期范围!

标签: php arrays multidimensional-array


【解决方案1】:

您可以对$firstarray 中的值使用foreach 循环,将默认价格设置为该数组中的值。然后,您可以使用每个值中的键来索引$secondarray,并将$firstarray 中的日期与$secondarray 中的每个范围进行比较。如果日期在该范围内,请将价格设置为该范围内的值。

$prices = array();
foreach ($firstarray as $key => $value) {
    $price = $value[1];
    foreach ($secondarray[$key] as $range) {
        if ($value[0] >= $range[0] && $value[0] <= $range[1]) {
            $price = $range[2];
            break;
        }
    }
    $prices[] = $price;
}

print_r($prices);

输出(用于您的样本数据):

Array
(
    [0] => 42
    [1] => 42
    [2] => 10
    [3] => 0
    [4] => 0
    [5] => 100
)

Demo on 3v4l.org

【讨论】:

  • 哇!非常感谢尼克,我真的很感激!
  • @ntsu 不用担心 - 很高兴再次提供帮助! :)
【解决方案2】:

这将检查第一个数组的日期是否在第二个数组的任何日期范围之间。如果您想检查其他索引,只需增加(或减少)$index。

要返回正确的价格,只需取消注释

return $firstarray[1]
and
return $secondarray[2]

输出

Is between
Is not there
Is not there

代码

<?php
/*

================ Firstarray
[0] => Array (
        [0] => 2020-12-01
        [1] => 24.00
    )

================ Secondarray
[0] => Array (
    [0] => Array (
        [0] => 2020-12-01
        [1] => 2020-12-05
        [2] => 42.00
        )
    [1] => Array (
        [0] => 2020-12-06
        [1] => 2020-12-08
        [2] => 35.00
        )
    [2] => Array (
        [0] => 2020-12-09
        [1] => 2020-12-12
        [2] => 76.00
    )
*/

$firstarray = array(array('2020-12-01', '24.00'));
$secondarray = array(array(array('2020-12-01', '2020-12-05', '42.00'), array('2020-12-06', '2020-12-08', '35.00'), array('2020-12-09', '2020-12-12', '76.00')));

$index = 0;
echo check($firstarray[$index], $secondarray[$index]);

function check($firstarray, $secondarray)
{
    foreach ($secondarray as $key => $value) {
        if (
            // Check if date is between two dates
            (date('Y-m-d', strtotime($firstarray[0])) >= date('Y-m-d', strtotime($value[0]))) && 
            (date('Y-m-d', strtotime($firstarray[0])) <= date('Y-m-d', strtotime($value[1])))) 
        {
            echo "Is between".PHP_EOL;
            // return $secondarray[2];
        } else {
            echo "Is not there".PHP_EOL;
        }
    }
    
    // return $firstarray[1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多