我正在尝试创建一个基于查询的排序算法。本质上,用户将输入身高、体重和其他一些属性的值。然后,我查询我们的模型数据库,将此人与与用户输入的测量值最接近的人进行匹配。我尝试基于一个加权变量完成此操作,该变量在查询的"while“语句中赋值,然后在最后返回该变量的值。下面是一些代码,向您展示我的意思:
$userHeight=$_POST['height'];
$userWeight=$_POST['weight'];
$userShoulder=$_POST['shoulder'];
$userWaist=$_POST['waist'];
$userInseam=$_POST['inseam'];
$heightMatchMultiple=0;
$heightMatchMultiple=0;
$weightMatchMultiple=0;
$shoulderMatchMultiple=0;
$waistMatchMultiple=0;
$inseamMatchMultiple=0;
function matchValues($array){
if(mysqli_num_rows($array) > 0) {
while($row=mysqli_fetch_array($array)){
$heightMatchMultiple=0;
if(isset($row['modelHeight'])){
if($userHeight==$row['modelHeight']){
$heightMatchMultiple=10;
}
elseif($userHeight==$row['modelHeight']+1 || $userHeight==$row['modelHeight']-1){
$heightMatchMultiple=9;
}
elseif($userHeight==$row['modelHeight']+2 || $userHeight==$row['modelHeight']-2){
$heightMatchMultiple=8;
}
elseif($userHeight==$row['modelHeight']+3 || $userHeight==$row['modelHeight']-3){
$heightMatchMultiple=7;
}
else{
$heightMatchMultiple=1;
}
}
echo "Model Match Multiple: " . $heightMatchMultiple . "<br>";
}
}//end of if num rows
else {
echo "No results to display.";
}
}//end of function
当我运行这个函数时,它返回heightMatchMultiple的else语句的值1而不是10,因为数据库中有一个高度为69的模型,这是我用作用户输入的。
我是否可以像我一样将+1或+2直接添加到$row‘’modelHeight‘变量中,或者是否有更好的方法来做到这一点。
编辑:有人问我在哪里初始化了变量$userHeight,所以我把它添加到了代码中。我尝试为$heightMatchMultiple=0创建全局变量,以使这些变量在我的matchValues函数中可用。这是正确的吗?
发布于 2015-11-24 05:35:33
$userHeight
在哪里被初始化/传入?我认为你现在得到69的原因是因为没有设置$userHeight
,因此默认情况下它得到的值是0,这意味着如果$row['modelHeight']
是69,1将是正确的答案。
回答你真正的问题,实际上是关于操作顺序的:是的,你写的东西应该做我认为你正在努力实现的事情。然而,您可能应该添加括号,即使它们不是严格必要的,只是为了暗示您未来的自己,您确实打算以特定的顺序进行计算。
例如,而不是这样:
elseif($userHeight == $row[ 'modelHeight' ] + 1 || $userHeight == $row[ 'modelHeight' ] - 1)
你可以这样写:
elseif(($userHeight == ( $row[ 'modelHeight' ] + 1 )) || ( $userHeight == ( $row[ 'modelHeight' ] - 1)))
或者您可以使用abs()
重写每个检查,如下所示:
elseif(abs($userHeight - $row['modelHeight']) == 1 )
这可以说是更具描述性的,因为你真正想说的是“如果差值是1”。
是的,您可以像在原始代码中一样使用+1和+2等,但您确实需要在某些时候设置或传入$userHeight
变量。
https://stackoverflow.com/questions/33885996
复制