我有一个类似的数组:
[0] => array( 23 , 890 )
[1] => array( 56 , 401 )
[2] => array( 56 , 491 )
[3] => array( 98 , 840 )
[4] => array( 56 , 821 )
[5] => array( 98 , 401 )
[6] => array( 23 , 875 )
我想按第一个元素排序,然后按第二个元素排序,但是当第二个元素在中间有数字9(x9x)时,我想要排序它最后排序。像这样:
[6] => array( 23 , 875 )
[0] => array( 23 , 890 ) // !!!
[1] => array( 56 , 401 )
[4] => array( 56 , 821 ) // note that 821 is before 491, even though it is greater
[2] => array( 56 , 491 ) // !!!
[5] => array( 98 , 401 )
[3] => array( 98 , 840 )
我一直试图摆弄usort(http://php.net/manual/en/function.usort.php),但没有成功。当在cmp函数中比较$ a到$ b时,我做了:
if( $a[0] > $b[0] )
return 1;
elseif( $a[0] < $b[0] )
return -1;
else
if( $a[1][1] == 9 ) // this did not do what I wanted
return 1;
if( $a[1] > $b[1] )
return 1;
elseif( $a[1] < $b[1] )
return -1;
else
return 0;
我真的可以使用一些帮助!
答案 0 :(得分:0)
在用于usort的功能中,使用此
if( $a[0] > $b[0] )
return 1;
else if( $a[0] < $b[0] )
return -1;
else if( $a[1]%10 == 9 )
return -1;
if( $a[1] > $b[1] )
return 1;
if( $a[1] < $b[1] )
return -1;
else
return 0;
答案 1 :(得分:0)
这对我有用,请参阅https://3v4l.org/jufbu
<?php
uasort($arr, function ($a, $b) {
if( $a[0] != $b[0] )
return $a[0] - $b[0];
else
if( strval($a[1])[1] == 9 )
return 1;
else
return $a[1] - $b[1];
});
答案 2 :(得分:-3)
您可以将键更改为数组中的第一个值,并按键排序数组。
<?php
$yourArray = array(
array( 23 , 890),
array( 56 , 401 ),
array( 56 , 491 ),
array( 98 , 840 ),
array( 56 , 821 ),
array( 56 , 821 ),
array( 23 , 875 )
);
$resultArray = array();
foreach($yourArray as $_key => $_childArray) {
$key = $_childArray[0].'.'.$_key;
if(strpos($_childArray[1],'9')) {
$key = $_childArray[0].'.9'.$_key;
}
$resultArray[$key] = $_childArray;
}
ksort($resultArray);
print_r($resultArray);
查看http://sandbox.onlinephpfunctions.com/code/238ca95a59c7bc4cd6f1e23d99d3d91021825503
的时间