Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP按三个或更多值对多维数组进行排序_Php_Arrays_Sorting_Usort - Fatal编程技术网

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第一个排序算法忽略了那些具有不同床/浴室的属性。请注意,您可能需要对此进行修补以使其完美,但有两个或两个以上的排序可能是您需要进行的方向。谢谢,我将尝试它,我会让您知道任何进展