2015-12-21 73 views
1

订购多维数组我有这样一个PHP由三个或多个值

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 
) 
) 

数组我需要订购:距离递增,lastSoldPrice递减(最近的日期为当前日期),并在最后一个订单由相同的卧室,浴室和平方英尺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 
) 

所以前两个订单准备和IM能够通过距离的顺序并使用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'); 

的代码,我希望有人能够帮助我。谢谢

+1

你是什么意思 '20%+或内 - '?如果不符合该范围的房屋根本无法显示?或结束在一起? –

+0

我忘了添加该信息,因此我编辑了该问题。相同的卧室,浴室和平方英尺在20%以内+或 - 与搜索地址谁拥有相同的数据。这将是最后的优先排序。 –

+0

嗯,我不确定这回答我的问题。也许你可以在你的问题中添加'搜索到的具有相同数据的地址',以及你期望结果的顺序? –

回答

0

要做到这一点,你需要先按平方英尺排序,然后按距离和最后售出的价格排序。

像这样

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'); 
+0

谢谢你的回答,但首先,sort1功能还应该比较床和浴缸? –

+0

@DanielDuque请参阅编辑。现在,第一个分拣算法忽略了不同床位/浴室的这些属性。请注意,您可能需要对此进行修改才能使其完美无缺,但有两种或更多种可能是您需要进入的方向。 – cantelope

+0

谢谢,我会试试它,我会告诉您任何进度 –