我在PHP中有以下数组:
array(29) {
[0]=>
string(22) "Kråksjö 111 1987-01-16"
[1]=>
string(18) "Kråksjö 1953-06-16"
[2]=>
string(25) "Skir ÄNGARNA 1 1967-07-12"
[3]=>
string(18) "Kråksjö 1967-07-12"
[4]=>
string(22) "Kråksjö 383 1928-10-03"
[5]=>
string(29) "Kråksjö JOHANSTORP 1928-10-03"
[6]=>
string(22) "Kråksjö 119 1982-11-06"
[7]=>
string(22) "Kråksjö 119 1957-05-16"
[8]=>
string(18) "Kråksjö 1926-08-21"
[9]=>
string(28) "Kråksjö LYCKEBORG 1926-08-21"
[10]=>
string(30) "Västra Vallgatan 27 1962-12-17"
[11]=>
string(18) "Kråksjö 1962-12-17"
[12]=>
string(22) "Kråksjö 111 1986-12-08"
[13]=>
string(22) "Kråksjö 119 1949-02-03"
[14]=>
string(22) "Kråksjö 135 1947-09-04"
[15]=>
string(22) "Kråksjö 135 1951-06-29"
[16]=>
string(18) "Kråksjö 1945-09-17"
[17]=>
string(23) "Kråksjö HAGA 1945-09-17"
[18]=>
string(22) "Kråksjö 135 1970-01-01"
[19]=>
string(22) "Kråksjö 135 1983-07-03"
[20]=>
string(22) "Kråksjö 383 1970-01-01"
[21]=>
string(18) "Kråksjö 1969-07-10"
[22]=>
string(24) "Nickalycke 19 1969-07-10"
[23]=>
string(20) "Hästebäck 1960-03-13"
[24]=>
string(21) "Kråksjö 51 1960-03-13"
[25]=>
string(21) "Kråksjö 51 1968-11-13"
[26]=>
string(18) "Kråksjö 1938-09-03"
[27]=>
string(18) "Kråksjö 1964-10-22"
[28]=>
string(18) "Kråksjö 1953-06-16"
}
我想要做的是计算每个家庭中有多少人。正如你所看到的,Kråksjö119出现了3次,这意味着有3个人有这个地址。我还想计算一下家庭中的年龄间隔:10 - 30年,30 - 50年和50 - 70年。
此数据应在如下表格中表示:
Address Persons in house 10-30years 30-50years 50-70years
Kråksjö 119 3 1 1 1
Kråksjö 112 2 0 0 2
如您所见,地址只应在表格中表示一次。
我用PHP尝试过这样:
foreach($adress as $key => $value)
{
$newArray[$key]['adress'] = substr($value, 0, -10); //Dela upp adressen //Get the address
$newArray[$key]['dob'] = substr($value, -10); //Dela upp personnummer //Get the date of birth
}
$printed_vals = array();
foreach($newArray as $arr)
{
if(!in_array($arr['adress'], $printed_vals)) {
$printed_vals[] = $arr['adress']; //Unique addresses
}
}
我不知道如何使用唯一地址来显示出生日期
答案 0 :(得分:0)
在您正在制作的新阵列中。使用地址作为密钥。并添加点作为其元素。
$newArray = array();
foreach($adress as $key => $value)
{
$adress = substr($value, 0, -10);
$dob = substr($value, -10);
if(!isset($newArray[$adress])) {
$newArray[$adress] = array();
}
$newArray[$adress][] = $dob;
}
<?php
$adress = array("Kråksjö 111 1987-01-16","Kråksjö 1953-06-16","Skir ÄNGARNA 1 1967-07-12","Kråksjö 1967-07-12","Kråksjö 383 1928-10-03"
,"Kråksjö JOHANSTORP 1928-10-03","Kråksjö 119 1982-11-06","Kråksjö 119 1957-05-16","Kråksjö 1926-08-21","Kråksjö LYCKEBORG 1926-08-21",
"Västra Vallgatan 27 1962-12-17","Kråksjö 1962-12-17","Kråksjö 111 1986-12-08","Kråksjö 119 1949-02-03","Kråksjö 135 1947-09-04",
"Kråksjö 135 1951-06-29","Kråksjö 1945-09-17","Kråksjö HAGA 1945-09-17","Kråksjö 135 1970-01-01","Kråksjö 135 1983-07-03"
,"Kråksjö 383 1970-01-01");
$newArray = array();
foreach($adress as $key => $value)
{
$adress = substr($value, 0, -10);
$dob = substr($value, -10);
if(!isset($newArray[$adress])) {
$newArray[$adress] = array();
}
$newArray[$adress][] = $dob;
}
echo "<table><tr><td>Address</td><td>Persons</td><td>10-30</td><td>30-50</td><td>50-70</td></tr>";
foreach ($newArray as $address => $val) {
echo "<tr><td>".$address."</td><td>".count($val)."</td><td>".somefunction($val,10,30)."</td><td>".somefunction($val,30,50)."</td><td>".somefunction($val,50,70)."</td></tr>";
}
echo "<table>";
function somefunction($vals,$start,$end) {
$count = 0;
foreach($vals as $val) {
$age = floor(abs(time() - strtotime($val))/(365*60*60*24));
if( $age > $start && $age < $end)
$count++;
}
return $count;
}
?>