san_jorich
@san_jorich
Творческий кодер

Как отфильтровать массив при частичном совпадении ключа?

Здравствуйте!
Есть функция, в которую заходит дата в формате MM-YYYY, после чего функция разбивает входящую дату на годи месяц, и, затем забирает массив, ключи которого: даты в формате YYYY-MM-DD. Как правильно отфильтровать и вернуть ключи\значения массива, в которых месяц и год совпадают?
код

function es_get_workingSheduler_data($needle_date, $personal){
  if( !isset($personal) || empty($personal) ) { $personal = es_getPersonal(); }
  if( isset( $needle_date) && !empty($needle_date) ){ list($month, $year) = explode("-", $needle_date); }
  else{ $month = date('m'); $year = date('Y'); }
  $days = cal_days_in_month(CAL_GREGORIAN, date($month), date($year) ); $response=array();
  foreach ($personal as $uid) {
    
    $all_days = get_user_meta($uid, 'sheduleGrafic', false); 
/* $actual_dates = array_filter.. возможно через for i от 1 до $days где $key = $year-$month-$i

*/
  }
wp_send_json($actual_dates);
}

  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
san_jorich
@san_jorich Автор вопроса
Творческий кодер
Оно работает, но чую, что стоит оптимизировать
function es_get_workingSheduler_data($needle_date, $personal){
  
  if( !isset($personal) || empty($personal) ) { $personal = es_getPersonal(); } // Проверям id
  
  if( isset( $needle_date) && !empty($needle_date) ){ list($month, $year) = explode("-", $needle_date); }
  else{ $month = date('m'); $year = date('Y'); }  // Определяем дату

  $data=[]; $actual_dates = array(); 

  $max_days = cal_days_in_month(CAL_GREGORIAN, date($month), date($year) ); 
  for ($i=1; $i<$max_days+1; $i++) { 
    if( $i <= 9 ){ $day = "0" . $i; } else { $day = $i; }
    array_push($actual_dates, "$year-$month-$day"); 
  } // Формируем актуальные даты запрашиваемого месяца
  
  foreach ($personal as $uid) { // Формируем выходящимй массив для каждого id
    $all_uid_dates = get_user_meta($uid, 'sheduleGrafic', false); $dates=array();
    foreach ($all_uid_dates as $needle_date) {      
      if( in_array( key($needle_date), $actual_dates) ){ array_push($dates, $needle_date); }      
    }  $data[$uid] = $dates;
  }  wp_send_json($data);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
strpos($fulldate, $month) === 0
substr($fulldate, 0, 7) === $month
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы