我的一个函数返回这个数组。。。是的,我在SO上看到了其他例子,但不能解决我的问题。
array (size=4)
0 =>
array (size=2)
'refferrer' => string 'http://google.com/' (length=18)
'number_of_reffers' => string '15' (length=2)
1 =>
array (size=2)
'refferrer' => string 'https://facebook.com/' (length=21)
'number_of_reffers' => string '22' (length=2)
2 =>
array (size=2)
'refferrer' => string 'none' (length=4)
'number_of_reffers' => string '74' (length=2)
3 =>
array (size=2)
'refferrer' => string 'http://findy.com/' (length=17)
'number_of_reffers' => string '6' (length=1)
我想知道如何使用按降序和密码顺序对这个数组进行排序
'number_of_refers'。。。
我想说的是,我希望拥有最多reffers的那个先来,然后是下一个,以此类推
这可能吗?我如何在php中做到这一点。
谢谢你的帮助。
您需要启动
给定你的数组,你会这样做:
usort( $array, 'sort_by_referrer_count' );
var_dump($array);
// This will sort ascending
function sort_by_referrer_count( $a, $b ) {
// Some defensive coding to ensure keys exist
$a = ( isset( $a['number_of_referrers'] ) ) ? $a['number_of_referrers'] : 0;
$b = ( isset( $b['number_of_referrers'] ) ) ? $b['number_of_referrers'] : 0;
if ($a == $b) {
return 0;
}
return ( $a < $b ) ? -1 : 1;
}
如果你想下降,那么你可以这样做(使用上面相同的功能):
usort( $array, 'sort_by_referrer_count' );
$array = array_reverse( $array );
在最简单的意义上;你可能只想试试这个:
<?php
// SORTING ALGORITHM:
// TO SORT IN THE OPPOSITE SENSE...
// (IE. ASCENDING [AS OPPOSED TO THE DEFAULT: DESCENDING]
// CHANGE THE LESS THAN (<) BELOW TO GREATER THAN (>)
function orderByNumRef($arrPrev, $arrNext) {
if ($arrPrev['number_of_reffers'] == $arrNext['number_of_reffers']) {
return 0;
}
return ($arrPrev['number_of_reffers'] < $arrNext['number_of_reffers']) ? -1 : 1;
}
//GIVEN ARRAY - DYNAMIC OR HARD-CODED
$arr = array(
array(
'refferrer' => 'http://google.com/',
'number_of_reffers' =>'15',
),
array(
'refferrer' => 'https://facebook.com/',
'number_of_reffers' =>'74',
),
array(
'refferrer' => 'http://findy.com/',
'number_of_reffers' =>'6',
),
);
//BEFORE SORTING:
var_dump($arr);
uasort($arr, 'orderByNumRef');
//AFTER SORTING:
var_dump($arr);
希望它能帮助。。。
试试这个:
<?php
$my_array;
//Sort Acceding
usort($my_array, create_function('$a,$b', 'return (Int)$a["number_of_reffers"]-(Int)$b["number_of_reffers"];'));
//Or sort Descending
usort($my_array, create_function('$a,$b', 'return (Int)$b["number_of_reffers"]-(Int)$a["number_of_reffers"];'));
我发现最简单的方法是创建一个以number_of_reffers
为键的新数组。然后使用ksort()
或krsort()
对新数组进行排序。这最终使原始数组保持不变。否则,以预期格式创建原始数组会更好。
<?php
// original array
$array = array(
array('refferrer' => 'http://google.com/', 'number_of_reffers' => '15'),
array('refferrer' => 'https://facebook.com/', 'number_of_reffers' => '22'),
array('refferrer' => 'none', 'number_of_reffers' => '74'),
array('refferrer' => 'http://findy.com/', 'number_of_reffers' => '6')
);
$foo = array(); // new empty array
// loop through $array, assign the number_of_reffers as the key for the refferrer
foreach ($array as $key => $bar) {
$foo[$bar['number_of_reffers']] = $bar['refferrer'];
}
/*
new array will be:
array(
'15' => 'http://google.com/',
'22' => 'https://facebook.com/'
etc .....
)
*/
// use Ksort / Krsort to sort the key asc or desc
ksort($foo); // ascending order
#krsort($foo); // descending order
die('<pre>'.print_r($foo, true).'</pre>'); // pretty printing of sorted array
?>
作为一个函数
<?php
Function Referrer_sort($array, $asc = true) {
IF (!is_array($array)) { return 'not an array'; }
$result = array();
foreach ($array as $key => $value) {
$result[$value['number_of_reffers']] = $value['refferrer'];
}
switch ($asc) {
case false: krsort($result); return $result;
default: ksort($result); return $result;
}
}
$foo_asc = Referrer_sort($array);
$foo_desc = Referrer_sort($array, false);
die('<pre>Ascending:<br>'.print_r($foo_asc, true).'<br>Descending:<br>'.print_r($foo_desc, true).'</pre>');
?>
更改原始阵列
通过更改值为number_of_reffers
的索引键来修改原始数组。
<?php
Function Rebuild_Referrer_sort($array, $asc = true) {
IF (!is_array($array)) { return 'not an array'; }
$result = array();
foreach ($array as $key => $value) {
$result[$value['number_of_reffers']] = array('refferrer' => $value['refferrer'], 'number_of_reffers' => $value['number_of_reffers']);
}
switch ($asc) {
case false: krsort($result); return $result;
default: ksort($result); return $result;
}
}
$foo_asc = Rebuild_Referrer_sort($array);
$foo_desc = Rebuild_Referrer_sort($array, false);
die('<pre>Ascending:<br>'.print_r($foo_asc, true).'<br>Descending:<br>'.print_r($foo_desc, true).'</pre>');
/**
Returns:
Ascending:
Array
(
[6] => Array
(
[refferrer] => http://findy.com/
[number_of_reffers] => 6
)
[15] => Array
(
[refferrer] => http://google.com/
[number_of_reffers] => 15
)
[22] => Array
(
[refferrer] => https://facebook.com/
[number_of_reffers] => 22
)
[74] => Array
(
[refferrer] => none
[number_of_reffers] => 74
)
)
Descending:
Array
(
[74] => Array
(
[refferrer] => none
[number_of_reffers] => 74
)
[22] => Array
(
[refferrer] => https://facebook.com/
[number_of_reffers] => 22
)
[15] => Array
(
[refferrer] => http://google.com/
[number_of_reffers] => 15
)
[6] => Array
(
[refferrer] => http://findy.com/
[number_of_reffers] => 6
)
)
*/
?>