Я изо всех сил пытался решить ее, но не смог. Было бы здорово, если бы вы могли помочь мне в этом.
У меня есть эти два массива..
$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, если да — вывести значение по индексу [2] из $secondarray из этого диапазона дат, если нет — вывести значение в индекс [1] из массива $first.
Оба массива всегда будут иметь одно и то же число, которое в данном случае равно 5 (цикл foreach всегда должен выполняться только для одного и того же индекса), но количество массивов или диапазонов дат внутри могут быть разными.
большое спасибо!!
Вы хотите сравнить каждую дату в $firstarray со всеми диапазонами в $secondarray или только диапазонами для соответствующего индекса?
привет ник, не только для диапазонов дат в соответствующем индексе!






Это проверяет, находится ли дата первого массива между любым из диапазонов дат второго массива. Если вы хотите проверить другие индексы, просто увеличьте (или уменьшите) $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];
}
Вы можете использовать цикл foreach для значений в $firstarray, установив цену по умолчанию в качестве значения из этого массива. Затем вы можете использовать ключ из каждого значения для индексации в $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
)
ух ты! Спасибо большое, Ник, я очень ценю это!
Что вы пробовали?