日期:2014-05-17 浏览次数:20647 次
$testArr = array(
'php' => array(
'author' => 'allen',
'price' => 40,
),
'java' => array(
'author' => 'james',
'price' => 55,
),
'mysql' => array(
'author' => 'gates',
'price' => 30,
),
'html' => array(
'author' => 'bill',
'price' => 21,
)
);
uasort($testArr, create_function('$a,$b', 'return $a["price"]>$b["price"];'));//价格升序,降序改成<
------解决方案--------------------
<?
$testArr = array(
'php' => array(
'author' => 'allen',
'price' => 40,
),
'java' => array(
'author' => 'james',
'price' => 55,
),
'mysql' => array(
'author' => 'gates',
'price' => 30,
),
'html' => array(
'author' => 'bill',
'price' => 21,
)
);
function my_sort($a, $b){
return $a['price'] > $b['price'];
}
uasort($testArr, "my_sort");
print_r($testArr);
?>
------解决方案--------------------
foreach ($testArr as $v) {
$k[] = $v['price'];
}
array_multisort($k, SORT_DESC,$testArr);
print_r(array_slice($testArr,0,3));
------解决方案--------------------
楼上几位共使用了两种类型的三种方法
对比如下
$testArr = array(
'php' => array(
'author' => 'allen',
'price' => 40,
),
'java' => array(
'author' => 'james',
'price' => 55,
),
'mysql' => array(
'author' => 'gates',
'price' => 30,
),
'html' => array(
'author' => 'bill',
'price' => 21,
)
);
/*** 应用回调函数 ***/
function func1($ar) {
uasort($ar, create_function('$a,$b', 'return $a["price"]>$b["price"];'));//价格升序,降序改成<
}
/*** 不使用回调函数 ***/
function func2($ar) {
foreach ($ar as $key => $row) {
$price[$key] = $row['price'];
}
array_multisort($price, SORT_ASC,$ar);
}
/*** 应用 php5.3 闭包 ***/
function func3($ar) {
array_multisort(array_map(function($v){return $v['price'];},$ar),$ar);
}
check_speed(200, 'func2', $testArr);
check_speed(200, 'func3', $testArr);
check_speed(200, 'func1', $testArr);