【发布时间】:2015-12-21 17:19:23
【问题描述】:
我有一个这样的数组
array(
[0] => Array (
[fullAddress] => 2482 Midvale St,Kettering, OH, 45420
[bedrooms] => 3
[bathrooms] => 1.0
[sqft] => 1548
[yearBuilt] => 1955
[lastSoldDate] => 12/09/2015
[lastSoldPrice] => 87,000
[distance] => 0.59
)
[1] => Array (
[fullAddress] => 2828 Vale Dr, Dayton, OH, 45420
[bedrooms] => 3
[bathrooms] => 1.5
[sqft] => 1356
[yearBuilt] => 1956
[lastSoldDate] => 10/09/2015
[lastSoldPrice] => 117,500
[distance] => 0.38
)
[2] => Array (
[fullAddress] => 2812 Vale Dr, Dayton, OH, 45420
[bedrooms] => 4
[bathrooms] => 2.0
[sqft] => 1248
[yearBuilt] => 1955
[lastSoldDate] => 05/13/2015
[lastSoldPrice] => 114,900
[distance] => 0.33
)
)
我需要订购:距离 asc,lastSoldPrice desc(最近日期到当前日期),最后按相同卧室、浴室和平方英尺订购,误差在 20% +- 以内。与这样的主要财产相比:
Array (
[fullAddress] => 2400 Ghent Ave, Dayton, OH 45420
[bedrooms] => 3
[bathrooms] => 1.0
[sqft] => 984
[yearBuilt] => 1956
[lastSoldDate] => 05/06/2014
[lastSoldPrice] => 74,763
)
所以前两个订单已经准备就绪,我可以使用 usort() 按距离和 lastsoldprice 进行订购,但我还没有拿到最后一个,因为我不知道如何与另一个数组(主要属性)进行比较。
这是我与 usort 一起使用的代码
function sort($a, $b) {
if ($a['distance']==$b['distance']) {
if ($a['lastSoldDate']==$b['lastSoldDate']) {
return 0;
} else {
return ($a['lastSoldDate']<$b['lastSoldDate']) ? 1 : -1;
}
} else {
return ($a['distance']>$b['distance']) ? 1 : -1;
}
}
usort($propertydata, 'sort');
我希望有人可以帮助我。谢谢
【问题讨论】:
-
“在 20% + 或 - 以内”是什么意思?不适合该范围的房屋是否应该根本不显示?还是最后聚在一起?
-
我忘记添加该信息,所以我编辑了问题。与具有相同数据的搜索地址相比,相同的卧室、浴室和平方英尺在 20% + 或 - 以内。这将是最后一个优先排序。
-
嗯,我不确定这是否能回答我的问题。也许您可以在您的问题中添加“具有相同数据的搜索地址”,以及您希望结果的顺序?
-
您可以使用array_multisort - 然后也许使用
Closure来实现距离公式?