用php获取下一个生日 [英] get the next birthday with php

查看:60
本文介绍了用php获取下一个生日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个json,用于存储生日数据.

I have a json which storing the data of birthdays.

    {
    "user": [
          {
    "id": "1",
    "name": "Tom",
    "bday": {
          "month": "1",
          "day": "23"
          }
    },
    {
    "id": "2",
    "name": "Tommy",
    "bday": {
          "month": "1",
          "day": "28"
          }
    },
    {
    "id": "3",
    "name": "Mary",
    "bday": {
          "month": "1",
          "day": "30"
          }
    },
    {
    "id": "4",
    "name": "Kelvin",
    "bday": {
          "month": "1",
          "day": "1"
          }
    },
    {
    "id": "5",
    "name": "Peter",
    "bday": {
          "month": "1",
          "day": "1"
          }
    }
    ]
    }

我想要一个函数返回今天或下一个生日的用户.例如,今天是1月21日(01-21),它将返回汤姆(01-23),如果今天是1月1日,它将返回Peter和Kelvin(01-01).

I want a function return the users which are birthday today or the next. For example , today is 21 Jan (01-21) , it will return Tom (01-23), If today is 1 Jan , it will return Peter and Kelvin (01-01).

这是我的主意,但我不知道如何在php中执行此操作...而且我认为这不是实现此目的的最佳解决方案.有更好的主意吗?

Here is my idea but i dont know how to do this in php... And I think this is not the best solution to do this. Any better idea?

function findBday($today){
$month = today's month;
$day = today's day;

//make a loop
if($month == $bday[month] && $day == $bday[day]){
// put the result into array
} else {
//put $month - $bday[month] , $day - $bday[day]  and add the smallest one into array 
and sort them;
//if today is December and no one birthday in this month , find January 
  }
return $array;
}

推荐答案

希望这对您有所帮助.我的小程序具有与您描述的相同的逻辑:

Hope this will help you. I have appleid same logic you have describe for:

$json = '{
    "user": [
          {
    "id": "1",
    "name": "Tom",
    "bday": {
          "month": "1",
          "day": "23"
          }
    },
    {
    "id": "2",
    "name": "Tommy",
    "bday": {
          "month": "1",
          "day": "28"
          }
    },
    {
    "id": "3",
    "name": "Mary",
    "bday": {
          "month": "1",
          "day": "30"
          }
    },
    {
    "id": "4",
    "name": "Kelvin",
    "bday": {
          "month": "1",
          "day": "1"
          }
    },
    {
    "id": "5",
    "name": "Peter",
    "bday": {
          "month": "1",
          "day": "1"
          }
    }

    ]
    }';
$birthday_array = json_decode($json,true);
//var_dump($bir_array);
$result = findBday($birthday_array['user']);
var_dump($result);


function findBday($user_details){
    $this_month = date("n");
    $this_day = date("j");
    $return_array = array();
    $tmp_array = array();
    //make a loop
    foreach ($user_details as $user_detail) {        
        $bday = $user_detail['bday'];
        if($this_month == $bday['month'] && $this_day == $bday['day']){
            $return_array[] = $user_detail['name'] . "(".$bday['day']."-".$bday['month'].")";
        } 
        else {
            $tmp_array[] =  $user_detail;
          }
    }
    if(count($return_array) === 0 && count($tmp_array) > 0)
    {

        //sort using php usort
        usort ($tmp_array, 'sortByOrder'); 
        $closest = null;        
        $tmp_val = "";
        foreach ($tmp_array as $key => $value) {
            $month = $value['bday']['month'];
            $day = $value['bday']['day'];
            if($month == $this_month)
            {
                if($day > $this_day){
                    $tmp_val = $value;
                    break;
                }
            }
            elseif ($month > $this_month) {
                $tmp_val = $value;
                break;
            }
        }      
        if($tmp_val != "")
            $tmp_array = $tmp_val;
        else    
            $tmp_array = $tmp_array[0];
        $bday = $tmp_array['bday'];
        $return_array[] = $tmp_array['name'] . "(".$bday['day']."-".$bday['month'].")";

    }


    return $return_array;
}
function sortByOrder($a, $b) {    
    $day_a = $a['bday'];
    $day_b = $b['bday'];
    if ($day_a['month'] > $day_b['month'])
        return 1;
    elseif($day_a['month'] == $day_b['month'])
    {
        if ($day_a['day'] > $day_b['day'])   
            return 1;
    }

}

这篇关于用php获取下一个生日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆