我正在尝试根据用户的兴趣播放广告等内容。广告商设置了某些其他参数。如果所有这些参数都与某个用户个人资料相匹配,那么必须向他播放该广告,否则请检查下一个广告。如果广告列表结束且没有匹配,则删除其中一个参数然后匹配。最后,如果没有匹配的参数,则播放位于列表顶部的广告。我有两个用于用户和广告的单独表格,加入它们并获取数据匹配是否合适? 谁能告诉我哪个循环最适合这里?
这是我迄今为止所尝试过的。
`公共功能广告($ ads,$ userid){
for($i=0;$i<count($ads);$i++){
$sql="SELECT ua.ads,ua.frm_age,ua.t_age,ua.user_income,ua.user_occupation,ua.user_gender,U.gender,U.income,U.occupation, U.dob FROM user_ad ua LEFT JOIN users U ON U.userid =ua.userid where U.userid='$userid' AND ua.ads='$ads[$i]'";
$res=@mysql_query($sql);
$numOFRows =@mysql_num_rows($res);
if($numOFRows > 0){
while ($result = @mysql_fetch_assoc($res)){
$returnArr[]=$result;
$user_occ=$result['user_occupation'];
$user_incm=$result['user_income'];
$gen=$result['user_gender'];
$f_age=$result['frm_age'];
$t_age=$result['t_age'];
//print_r ($returnArr);
$dob= $result['dob'];
$birthdate = new DateTime($dob);
$today = new DateTime('today');
$age = $birthdate->diff($today)->y;
//print_r ($age);
//return (array($result));
for($i=0;$i<4;$i++){
for($j=0;$j<count($ads);$j++){
if ($ads[$j]!==0){
if(($user_occ==$result['occupation'])&&($user_incm==$result['income'])&&($gen==$result['gender'] || $gen =='Both')&&(($age>= $f_age) && ($age<= $t_age))){
$ads[]=$result['ads'];
}
return $ads[$j];
}
}
for($k=0;$k<count($ads);$k++){
if ($ads[$k]!==0){
if(($user_occ==$result['occupation'])&&($gen==$result['gender'])&&(($age>= $f_age) && ($age<= $t_age))){
$ads[]=$result['ads'];
return $ads[$k];
}
}
}
for($m=0;$m<count($ads);$m++){
if ($ads[$m]!==0){
if(($gen==$result['gender'])&&(($age>= $f_age) && ($age<= $t_age))){
$ads[]=$result['ads'];
return $ads[$m];
}
}
}
for($n=0;$n<count($ads);$n++){
if ($ads[$n]!==0){
if(($gen==$result['gender'])||($gen=='Both'))
{
$ads[]=$result['ads'];
return $ads[$n];
}
}
}
}
return $ads[0];
}
}
}
}``
如我所建议的那样,我使用了foreach循环并尝试了这一点。
while ($result = @mysql_fetch_array($res)){
$dob= $result['dob'];
$birthdate = new DateTime($dob);
$today = new DateTime('today');
$age = $birthdate->diff($today)->y;
//print_r ($age);
foreach($result as $array){
for($i=0;$i<count($ads);$i++){
if(($array['user_occupation']==$array['occupation'])&& ($array['user_income']==$array['income']) && ($array['user_gender']==$array['fbgender'] || $array['user_gender']=='Both') && (($age>=$array['frm_age'])&&($age<=$array['t_age']))){
return $ads[$i];
break;
}
elseif(($array['user_occupation']==$array['occupation']) && ($array['user_gender']==$array['fbgender'] || $array['user_gender']=='Both') && (($age>=$array['frm_age'])&&($age<=$result['t_age']))){
//return $ads[$i];
break;
}
elseif(($array['user_gender']==$array['fbgender'] || $array['user_gender']=='Both') && (($age>=$array['frm_age'])&&($age<=$array['t_age']))){
//return $ads[$i];
break;
}
elseif(($array['user_gender']==$array['fbgender'] || $array['user_gender']=='Both')){
//return $ads[$i];
break;
}
else{
//return $ads[0];
}
}
}
但是我得到的错误就像未定义的变量$ array和非法偏移&#39; user_occupation&#39;,非法偏移&#39;职业&#39;等等...
答案 0 :(得分:0)
我会使用一个foreach()
循环来切换参数,跟踪哪些广告以及填充了多少要求,循环完成后,获得最佳匹配并将其显示给用户
答案 1 :(得分:0)
您可以预告广告并查看条件。
但是,如果有大量广告,您可以考虑将它们存储为数组(如果尚未存在),或者甚至将它们存储在数据库(如mysql)中,并仅选择所需的特定广告(如果有很多广告需要循环,那么毫无疑问会比foreach更快)。如果mysql返回多个结果,您可以获取结果并使用while循环进行循环。