У меня есть отдельный набор функций, которые извлекают «Дата» и «Время» из моего приложения и помещают дату в качестве ключа, а время в качестве многомерного значения.
Для примера:
$alldatetimes = array(
'date1' => array('13:00','14:30','14:30','14:30','15:00'),
'date2' => array('09:00','10:00','10:30','10:30','12:00')
);
foreach ($alldatetimes as $date => $times) {
echo '<h1>This Exports:</h1>';
echo '<h2>'.$date.'</h2><br>';
foreach ($times as $time) {
echo $time.'<br>';
}
}
This exports:
date1
13:00
14:30
14:30
14:30
15:00
date2
09:00
10:00
10:30
10:30
12:00
Я пытаюсь контролировать, если время помещено в массив, так что только одно значение находится в массиве (я не хочу 3 экземпляра 14:30 для этой даты).
Основываясь на других постах здесь, я попытался создать что-то вроде этого, чтобы определить, было ли значение там, но я не могу понять, как связать все это вместе:
function searchForId($id, $array) {
foreach ($array as $date => $times) {
foreach ($times as $time) {
if ($time === $id) {
return $time;
}
}
}
return null;
}
Есть идеи?
Обновление: вот как массив создается изначально — это, вероятно, может быть более эффективным:
while ($schedule_q -> have_posts() ) : $schedule_q->the_post();
$alldatetimes [get_the_date()][] = get_the_time();
endwhile;
Это не показано в вашем вопросе, но как насчет изменения вашей функции, которая создает массив даты / времени, чтобы использовать время в качестве ключей вместо значений? Используя что-то вроде
$alldatetimes[$date][$time]++
в этой функции вы получите массив с одним значением для каждого времени, который будет числом вхождений этой комбинации даты и времени, например:
$alldatetimes = array(
'date1' => array('13:00' => 1,'14:30' => 3,'15:00' => 1),
'date2' => array('09:00' => 1,'10:00' => 1,'10:30' => 2,'12:00' => 1)
);
Затем вы можете изменить свой код, который печатает их, чтобы использовать ключ.
foreach ($times as $time => $count) {
echo $time.'<br>';
}
Вы можете добавить array_unique()
вызовите каждый подмассив перед тем, как зациклить результаты, чтобы убедиться, что все они уникальны:
foreach ($alldatetimes as &$row) {
$row = array_unique($row);
}
Выход:
<h1>This Exports:</h1>
<h2>date1</h2><br>
13:00<br>
14:30<br>
15:00<br>
<h1>This Exports:</h1>
<h2>date2</h2><br>
09:00<br>
10:00<br>
10:30<br>
12:00<br>
Вы можете написать рекурсивную функцию
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}