Php usort通过可选列对加密数据进行排序(表排序)
在按列名对表进行排序方面有些困难。问题是数据是加密的,所以不能按所需方向(升序-降序)按列排序。所以我想我可以使用usort,但尽管我可以用它调用一个函数,例如,Php usort通过可选列对加密数据进行排序(表排序),php,object,usort,Php,Object,Usort,在按列名对表进行排序方面有些困难。问题是数据是加密的,所以不能按所需方向(升序-降序)按列排序。所以我想我可以使用usort,但尽管我可以用它调用一个函数,例如,usort($data,“sortMyData”)我无法传递字段进行排序,也无法将字段的方向传递给它。所以要做到这一点,我需要编写一个函数来对每一个可能的列进行排序,这根本不是理想的,有人知道我可以用什么方法,例如,向usort添加另一个参数,它将包含排序依据的属性和它的方向 也许另一种方法是将整个数据集解密到某个内存表中,但由于数据是
usort($data,“sortMyData”)代码>我无法传递字段进行排序,也无法将字段的方向传递给它。所以要做到这一点,我需要编写一个函数来对每一个可能的列进行排序,这根本不是理想的,有人知道我可以用什么方法,例如,向usort添加另一个参数,它将包含排序依据的属性和它的方向
也许另一种方法是将整个数据集解密到某个内存表中,但由于数据是加密的且安全的,我想知道这是否会为漏洞打开道路
我的最后一个选择是将其构建到foreach循环中,我可以看到这是有意义的,但这是唯一的方法吗
谢谢
克雷格请参考这个问题
它提供了一个向usrot函数传递额外参数的示例
function sort_by_term_meta( $terms, $meta )
{
usort($terms, array(new TermMetaCmpClosure($meta), "call"));
}
function term_meta_cmp( $a, $b, $meta )
{
$name_a = get_term_meta($a->term_id, $meta, true);
$name_b = get_term_meta($b->term_id, $meta, true);
return strcmp($name_a, $name_b);
}
class TermMetaCmpClosure
{
private $meta;
function __construct( $meta ) {
$this->meta = $meta;
}
function call( $a, $b ) {
return term_meta_cmp($a, $b, $this->meta);
}
}
基本上,您需要创建一个类函数来进行排序,并且在构建类时可以传递额外的参数(列、方向)
我无法传递字段进行排序,也无法将其定向到其中
事实上,你可以。有一个例子:
<?php
// Example data
$data = array(
array('name' => 'Gamma', 'val' => 25),
array('name' => 'Beta', 'val' => 5),
array('name' => 'Alpha', 'val' => 10)
);
function sortme(&$array, $onfield, $isdesc) {
usort($array,
function($a, $b) use ($onfield, $isdesc) { // 'use' keyword allows to reference external variables from the inside
// custom method to obtain and comapre data;
$v1 = isset($a[$onfield]) ? $a[$onfield] : NULL;
$v2 = isset($b[$onfield]) ? $b[$onfield] : NULL;
if ($v1 < $v2) return ($isdesc ? 1 : -1);
elseif ($v1 > $v2) return ($isdesc ? -1 : 1);
else return 0;
// Note: the conditions above can be replaced by spaceship operator in PHP 7+:
// return $isdesc ? ($v2 <=> $v1) : ($v1 <=> $v2) ;
}
);
}
sortme($data, 'name', false); // sort by `name` ascending
print_r($data); // Alpha -> Beta -> Gamma
sortme($data, 'val', true); // sort by `val` descending
print_r($data); // 25 -> 10 -> 5
相当不必要的复杂,使用使用
关键字可以在不创建额外类的情况下完成此操作,请在同一问题线程中进一步查看此答案: