如何让此代码返回多个相同的英国邮政编码?

时间:2011-03-09 18:46:32

标签: php

在我们的网站上,我们有一个功能,人们可以输入他们的英国邮政编码,并给他们最近的十位治疗师名单。除了两个或更多的治疗师共享相同的邮政编码之外,它的效果很好,只会返回其中一个。

我相信这个函数导致了这个问题:

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数组的,这就是为什么每个邮政编码只出现一次。

这有意义吗?我如何改变代码,以便共享邮政编码的治疗师都出现在列表中?我继承了这段代码,我的编程知识很少。如有必要,我可以发布完整的代码。

感谢。

1 个答案:

答案 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);
}

但之后,你必须改变你使用数组的方式