PHP& MySql数组问题(非常烦人!)

时间:2011-01-27 21:09:54

标签: php mysql

作为我正在尝试做的简要说明:

我有一个包含各种列的MySql数据库。其中一列是“生日”列,其中包含用户的出生日期。

我要做的是在本专栏中记录所有出生日期,将它们转换为年龄,然后算出平均年龄/平均年龄。

所以...我已经得到了两个部分的代码工作,我只是不能让它们一起工作!

我可以提供生日功能,我有一个出生日期,它会把它变成一个年龄。

我可以将所有出生日期都放到一个数组中。

我不能做的就是这里的任何事情。基本上,我无法将数组转入年龄并计算出均值,这让我疯狂。我是PHP的新手,但到目前为止,我已经完成了相当多的工作。

真的很感谢帮助让这个工作!我只是不知道从下面去哪里。

这是我的代码:

// Age calculation

function CalculateAge($BirthDate)
{
    // Put the year, month and day in separate variables
    list($Day, $Month, $Year) = explode("/", $BirthDate);

    $YearDiff = date("Y") - $Year;

    // If the birthday hasn't arrived yet this year, the person is one year younger
    if(date("m") < $Month || (date("m") == $Month && date("d") < $DayDiff))
    {
            $YearDiff--;
    }
    return $YearDiff;
}

// How to use the function
// CalculateAge("24/06/1991");

//Birthdate array

$ages = mysql_query("SELECT birthday FROM user_records");

$agearray = array(); 

while($row=mysql_fetch_assoc($ages)) {array_push($agearray, $row);} 

感谢您提前提供任何帮助。

4 个答案:

答案 0 :(得分:2)

请记住$ row是一个关联数组而不是字符串变量,因此您需要执行$ row ['birthday']或者您将数组对象传入函数。我在下面的代码中解释过。

希望有所帮助

// Age calculation

function CalculateAge($BirthDate)
{
   // Put the year, month and day in separate variables
   list($Day, $Month, $Year) = explode("/", $BirthDate);

   $YearDiff = date("Y") - $Year;

    // If the birthday hasn't arrived yet this year, the person is one year younger
   if(date("m") < $Month || (date("m") == $Month && date("d") < $DayDiff))
   {
        $YearDiff--;
   }
   return $YearDiff;
}

// How to use the function
// CalculateAge("24/06/1991");

//Birthdate array

 $birthdays = mysql_query("SELECT birthday FROM user_records");

 $birthdaysArray = array(); 

 while($row=mysql_fetch_assoc($birthdays)) { $birthdaysArray[] = $row['birthday']; } 

//LOOP HERE TO FIND AGES

答案 1 :(得分:2)

drop table if exists users;

create table users
(
user_id int unsigned not null auto_increment primary key,
username varchar(32) unique not null,
dob date not null
)
engine=innodb;

insert into users (username, dob) values
('f00','1960-01-01'),    ('bar','1970-01-01'),
('alpha','1980-01-01'),    ('beta','1990-01-01'),
('delta','2000-01-01'),    ('theta','2010-01-01'),
('zeta',curdate());

select
 if(sum(a.age) is null, 0, sum(a.age)) as sum_age,
 count(*) as count_ages,
 if(count(*) = 0, 0, sum(a.age) / count(*)) as avg_age
from
(
select 
 date_format(now(), '%Y') - date_format(dob, '%Y') - (date_format(now(), '00-%m-%d') < date_format(dob, '00-%m-%d')) as age
from users
) a

+---------+------------+---------+
| sum_age | count_ages | avg_age |
+---------+------------+---------+
|     156 |          7 | 22.2857 |
+---------+------------+---------+
1 row in set (0.00 sec)

答案 2 :(得分:0)

接下来,您需要迭代数组并使用函数转换为age。

$calculated_ages = array();
foreach($agearray as $d)
{
  $calculated_ages[] = CalculateAge($d);
}

然后得到平均值。

答案 3 :(得分:0)

不是将其拉入PHP,而是直接从MySQL查询中执行此操作,

例如,以下查询返回以当天为单位的用户的平均年龄:

SELECT AVG(DATEDIFF(NOW(), birthday)) AS AverageAge FROM `user_records`;