php数组,在foreach循环中使用相同的键存储多个值

时间:2012-12-22 10:36:14

标签: php arrays multidimensional-array key multiple-value

我相信我想要完成的事情是直截了当的。

在某些上下文中,如果给定距离小于给定的接近距离($ prox),则下面的代码将城市名称($ cityProx)推送到单维数组($ validLocationCity)

if($actualDistance <= $prox)
{   
    array_push($validLocationCity,$cityProx);
}

所以这很好。 但现在我希望根据距离对这一系列城市进行排序。

我的理论是一种简单的方法来实现这一点,就是将距离存储为数组中的键,允许我使用kso​​rt(),这将允许我循环遍历城市,最近的点是最近的。

if($actualDistance <= $prox)
{   
    $validLocationCitySortDistance[$actualDistance] = $cityProx;
}

以上是我第一次尝试完成此操作,但是,当然,任何距离相同的城市都会覆盖为该距离/密钥存储的先前值。

如何实现这一点,以便如果键是相同的,即相等的距离,则新值(城市名称)将简单地添加/附加到该键。 还假设距离大于1的情况。

//结束问题
// ---------------------------------&GT;&GT;

我尝试添加一个新数组作为值,如果已经获取给定键

if($validLocationCitySortDistance[$actualDistance] != null) 
{
    $validLocationCitySortDistance[$actualDistance] [] = $cityProx;
}
else
{
     $validLocationCitySortDistance[$actualDistance] = $cityProx;
}

这似乎是一种不正确且过于复杂的方式来做我想做的事情。由于我不知道需要迭代多少次,所以这种方法很糟糕。 我承认,我想我可能只是误解了我在上面的例子中做了什么。

如果有人可以提供帮助,我真的很感激,我也会问你是否看到了一个快速的解决方案,也展示了如何使用foreach等来从你的解决方案中获取值。

希望你能得到我,
提前致谢!

1 个答案:

答案 0 :(得分:1)

使用城市名称作为键并应用asort()将起到作用。

$myarr = ['delhi' => 12,
          'kolkata' => 30,
          'hyderabad' => 4,
          'adilabad' => 1,
          'vizag' => 10];
asort($myarr);

然后您可以使用

访问密钥
foreach($myarr as $key => $value) {
    echo "{$key} : {$value}";
}

array_walk($myarr, function($value, $key) {
   echo "{$key} : {$value} ";
});