Php 按值排序多维数组,然后按偶数排序

Php 按值排序多维数组,然后按偶数排序,php,Php,我正在处理多维数组。每个数组由沿街道的属性组成,其中一个值是street address 我想对数组进行排序,这样对于每条街道,奇数地址列在偶数地址之前。它已经按数字排序(从低到高),所以我唯一想弄清楚的是如何在平局前排序赔率 $array = array( array('apn' => 345345345, 'sqft' => 1200, 'address' => '323 Pacific Ave.'), array('apn' => 345345342

我正在处理多维数组。每个数组由沿街道的属性组成,其中一个值是street address

我想对数组进行排序,这样对于每条街道,奇数地址列在偶数地址之前。它已经按数字排序(从低到高),所以我唯一想弄清楚的是如何在平局前排序赔率

$array = array(
    array('apn' => 345345345, 'sqft' => 1200, 'address' => '323 Pacific Ave.'),
    array('apn' => 345345342, 'sqft' => 1421, 'address' => '324 Pacific Ave.'),
    array('apn' => 345345346, 'sqft' => 1012, 'address' => '325 Pacific Ave.'),
    array('apn' => 345345347, 'sqft' => 1093, 'address' => '328 Pacific Ave.'),
    array('apn' => 345345353, 'sqft' => 1121, 'address' => '12 Lincoln Ave.'),
    array('apn' => 345345351, 'sqft' => 1643, 'address' => '13 Lincoln Ave.'),
    array('apn' => 345345352, 'sqft' => 1222, 'address' => '14 Lincoln Ave.')
);
目前我有以下几点:

usort($array, function($a, $b)
{
    if ($a['address'] % 2 == $b['address'] % 2) {
        if ($a['address'] == $b['address']) {
            return 0;
        }
        return ($a['address'] < $b['address']) ? -1 : 1;
    }    
    return ($a['address'] % 2 == 0) ? 1 : -1;
});
因此,这将是:

usort($array, function($x, $y)
{
   $x = preg_split('/^(\d+)\s+(.*)/', $x['address'], -1 , 3);
   $y = preg_split('/^(\d+)\s+(.*)/', $y['address'], -1 , 3);
   $x[2] = $x[0] % 2;
   $y[2] = $y[0] % 2;
   if($x[1]==$y[1]) //first level: streets
   {
      if($x[2]==$y[2]) //second level: oddity
         return $x[0]<$y[0]?-1:$x[0]!=$y[0]; //third level: numeric order
      return $x[2]>$y[2]?-1:1;
   }
   return $x[1]<$y[1]?-1:1;
});
usort($array,function($x,$y)
{
$x=preg_split('/^(\d+)\s+(.*)/',$x['address'],-1,3);
$y=preg_split('/^(\d+)\s+(.*)/',$y['address'],-1,3);
$x[2]=$x[0]%2;
$y[2]=$y[0]%2;
如果($x[1]=$y[1])//第一层:街道
{
if($x[2]==$y[2])//第二级:奇数
返回$x[0]$y[2]?-1:1;
}
返回$x[1]
usort($array, function($x, $y)
{
   $x = preg_split('/^(\d+)\s+(.*)/', $x['address'], -1 , 3);
   $y = preg_split('/^(\d+)\s+(.*)/', $y['address'], -1 , 3);
   $x[2] = $x[0] % 2;
   $y[2] = $y[0] % 2;
   if($x[1]==$y[1]) //first level: streets
   {
      if($x[2]==$y[2]) //second level: oddity
         return $x[0]<$y[0]?-1:$x[0]!=$y[0]; //third level: numeric order
      return $x[2]>$y[2]?-1:1;
   }
   return $x[1]<$y[1]?-1:1;
});