PHP按三个或更多值对多维数组进行排序
我有一个像这样的数组PHP按三个或更多值对多维数组进行排序,php,arrays,sorting,usort,Php,Arrays,Sorting,Usort,我有一个像这样的数组 array( [0] => Array ( [fullAddress] => 2482 Midvale St,Kettering, OH, 45420 [bedrooms] => 3 [bathrooms] => 1.0 [sqft] => 1548 [yearBuilt] => 1955 [lastSoldDate] => 12/09/2015
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
)
)
我需要订购:distance 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');
函数排序($a,$b){
如果($a['distance']=$b['distance']){
如果($a['lastSoldDate']=$b['lastSoldDate'])){
返回0;
}否则{
返回($a['lastSoldDate']$b['distance'])?1:-1;
}
}
usort($propertydata,'sort');
我希望有人能帮助我。谢谢。要做到这一点,您需要首先按平方英尺对阵列进行排序,然后按距离和上次售价进行排序 像这样
function sort1($a, $b) {
if ($a['bedrooms']!=$b['bedrooms'] || $a['bathrooms']!=$b['bathrooms'] || $a['sqft']==$b['sqft']) {
return 0;
} else {
return (abs($a['sqft']-$b['sqft'])<$a['sqft']*.2) ? -1 : 1;
}
}
function sort2($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, 'sort1');
usort($propertydata, 'sort2');
函数sort1($a,$b){
如果($a[“卧室”!=$b[“卧室”]|$$a[“浴室”!=$b[“浴室”]|$$a[“平方英尺”]=$b[“平方英尺]){
返回0;
}否则{
return(abs($a['sqft']-$b['sqft'])要执行此操作,您需要首先按平方英尺对数组进行排序,然后按距离和上次售价对数组进行排序
像这样
function sort1($a, $b) {
if ($a['bedrooms']!=$b['bedrooms'] || $a['bathrooms']!=$b['bathrooms'] || $a['sqft']==$b['sqft']) {
return 0;
} else {
return (abs($a['sqft']-$b['sqft'])<$a['sqft']*.2) ? -1 : 1;
}
}
function sort2($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, 'sort1');
usort($propertydata, 'sort2');
函数sort1($a,$b){
如果($a[“卧室”!=$b[“卧室”]|$$a[“浴室”!=$b[“浴室”]|$$a[“平方英尺”]=$b[“平方英尺]){
返回0;
}否则{
回报率(资产负债表($a['sqft']-$b['sqft']))“在20%+或-”是什么意思?不在该范围内的房子应该不显示吗?或者在最后聚集在一起?我忘了添加这些信息,所以我编辑了这个问题。相同的卧室、浴室和平方英尺在20%+以内,或者-与具有相同数据的搜索地址相比。这将是最后的优先排序。嗯,我不是我不确定这是否回答了我的问题。也许你可以在你的问题中添加“搜索地址谁拥有相同的数据”,以及你期望结果的顺序?你可以使用-然后可能使用一个闭包来实现距离公式的排序?你说的“20%+以内”或-?不适合这个范围的房子是什么意思t范围根本不显示?或者在最后聚集在一起?我忘了添加这些信息,所以我编辑了这个问题。相同的卧室、浴室和平方英尺在20%+以内,或者-与具有相同数据的搜索地址相比。这将是最后一个优先级排序。嗯,我不确定这是否回答了我的问题。也许你可以添加“搜索地址wh”o对您的问题具有相同的数据,以及您预期结果的顺序?您可以使用-然后也许使用闭包进行排序来实现距离公式?感谢您的回答,但首先,sort1函数还应该比较床和浴室?@DanielDuque请参见编辑。现在,第一个排序算法忽略了正确的排序与不同的床/浴室联系。请注意,您可能需要对此进行修补,以使其完美,但有两种或更多的分类可能是您需要的方向。谢谢,我将尝试它,我会让您知道任何进展感谢您的回答,但首先,sort1功能还应该比较床和浴室?@DanielDuque请参阅编辑。现在t第一个排序算法忽略了那些具有不同床/浴室的属性。请注意,您可能需要对此进行修补以使其完美,但有两个或两个以上的排序可能是您需要进行的方向。谢谢,我将尝试它,我会让您知道任何进展