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