更好的 PHP usort()
Better PHP usort()
我需要合并然后对两个具有不同数据结构的数组进行排序(无法在 MySQL 查询中排序),但两者都有一个 created_on
字段。
所以我正在使用 usort()
和自定义函数。
在我的控制器中
usort(merged_array, 'sort_records');
在我的辅助函数中
if(!function_exists('sort_records')){
function sort_records($a,$b){
if ( $a['created_at'] == $b['created_at'] )
return 0;
if ( $a['created_at'] < $b['created_at'] )
return -1;
return 1;
}
}
我想让这个 sort_records()
函数可重用。所以我可以将它与其他数组一起使用。也许像..
function sort_records($a,$b,$index){
if ( $a[$index] == $b[$index] )
return 0;
if ( $a[$index] < $b[$index] )
return -1;
return 1;
这对 usort()
可行吗,因为当您调用该函数时它根本不需要参数?还有其他选择吗?
您可以创建 class
class SortRecord
{
private $index;
public function __construct($index)
{
$this->index = $index;
}
public function sort_records($a, $b)
{
if ( $a[$this->index] == $b[$this->index] )
return 0;
if ( $a[$this->index] < $b[$this->index] )
return -1;
return 1;
}
}
然后你可以把它传给usort
。
$obj = new SortRecord('created_at');
usort($merged_array, array($obj, 'sort_records'));
您也可以在 usort 上使用 use
关键字,但您必须将内部函数声明为 anonymous :
function better_usort($array, $index) {
return usort($array, function($a, $b) use($index){
if ($a[$index] == $b[$index])
return 0;
if ($a[$index] < $b[$index])
return -1;
return 1;
});
}
然后你可以用
调用它
better_usort($merged_array, 'created_at');
把usort
放在sort_records
里面然后使用匿名函数,像这样:
function sort_records(&$array,$index){
return usort($array, function ($a, $b) use ($index) {
if ( $a[$index] == $b[$index] )
return 0;
if ( $a[$index] < $b[$index] )
return -1;
return 1;
});
}
然后你可以用任何你需要的索引来调用它
sort_records($array, 'created_at');
我需要合并然后对两个具有不同数据结构的数组进行排序(无法在 MySQL 查询中排序),但两者都有一个 created_on
字段。
所以我正在使用 usort()
和自定义函数。
在我的控制器中
usort(merged_array, 'sort_records');
在我的辅助函数中
if(!function_exists('sort_records')){
function sort_records($a,$b){
if ( $a['created_at'] == $b['created_at'] )
return 0;
if ( $a['created_at'] < $b['created_at'] )
return -1;
return 1;
}
}
我想让这个 sort_records()
函数可重用。所以我可以将它与其他数组一起使用。也许像..
function sort_records($a,$b,$index){
if ( $a[$index] == $b[$index] )
return 0;
if ( $a[$index] < $b[$index] )
return -1;
return 1;
这对 usort()
可行吗,因为当您调用该函数时它根本不需要参数?还有其他选择吗?
您可以创建 class
class SortRecord
{
private $index;
public function __construct($index)
{
$this->index = $index;
}
public function sort_records($a, $b)
{
if ( $a[$this->index] == $b[$this->index] )
return 0;
if ( $a[$this->index] < $b[$this->index] )
return -1;
return 1;
}
}
然后你可以把它传给usort
。
$obj = new SortRecord('created_at');
usort($merged_array, array($obj, 'sort_records'));
您也可以在 usort 上使用 use
关键字,但您必须将内部函数声明为 anonymous :
function better_usort($array, $index) {
return usort($array, function($a, $b) use($index){
if ($a[$index] == $b[$index])
return 0;
if ($a[$index] < $b[$index])
return -1;
return 1;
});
}
然后你可以用
调用它better_usort($merged_array, 'created_at');
把usort
放在sort_records
里面然后使用匿名函数,像这样:
function sort_records(&$array,$index){
return usort($array, function ($a, $b) use ($index) {
if ( $a[$index] == $b[$index] )
return 0;
if ( $a[$index] < $b[$index] )
return -1;
return 1;
});
}
然后你可以用任何你需要的索引来调用它
sort_records($array, 'created_at');