在我们的网站上,我们有一个功能,人们可以输入他们的英国邮政编码,并给他们最近的十位治疗师名单。除了两个或更多的治疗师共享相同的邮政编码之外,它的效果很好,只会返回其中一个。
我相信这个函数导致了这个问题:
function postcode_closest ($needle,$haystack) // $needle = user entered postcode.
// $haystack = list of postcodes.
{
if (!$needle||!$haystack) { return; }
if (!is_array($haystack)) { return; }
foreach ($haystack as $postcode)
{
$results[$postcode]=postcode_distance($needle,$postcode);
}
asort($results);
return $results;
}
编辑:以下是调用此函数的主要代码部分:
$query = mysql_query("SELECT latitude, longitude FROM postcodes WHERE outcode='$outcode'");
if (mysql_fetch_array($query))
{
$closest=postcode_closest($outcode,$postcodes); // Call the postcode_closest function to get a list of $postcodes ordered by distance from $outcode
echo "<table>\n<thead>\n<tr><th scope='col'>Name</th><th scope='col'>Town</th><th scope='col'>Telephone</th><th scope='col'>Email</th><th scope='col'>Distance</th></tr>\n</thead>\n<tbody>\n";
$i = 0;
foreach ($closest as $key => $val)
{
if ($i < 10) // Display this number of results from the list.
{
$query = mysql_query("SELECT member, postcode, name, town, telephone, email FROM healers WHERE postcode = '$key'");
$one = mysql_fetch_array($query);
// Linkify email addresses, but only if they exist.
if ($one[5])
{
$one[5] = "<a href='mailto:$one[5]'>$one[5]</a>";
}
echo "<tr><td>$one[2]</td><td>$one[3]</td><td>$one[4]</td><td>$one[5]</td><td>$val Miles</td></tr>\n";
$i++;
}
}
echo "</tbody>\n</table>\n";
}
如果我理解正确,$ postcode被用作$ results数组的键,这就是为什么每个邮政编码只出现一次。
这有意义吗?我如何改变代码,以便共享邮政编码的治疗师都出现在列表中?我继承了这段代码,我的编程知识很少。如有必要,我可以发布完整的代码。
感谢。
答案 0 :(得分:0)
我认为你是对的,你必须给每个键添加多个邮政编码的可能性。 示例:
foreach ($haystack as $postcode)
{
// if we already have this code
if(isset($results[$postcode]))
$results[$postcode][]=postcode_distance($needle,$postcode);
else
$results[$postcode]=postcode_distance($needle,$postcode);
}
但之后,你必须改变你使用数组的方式