Php 在多个数组中对数据进行排序

Php 在多个数组中对数据进行排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有这样一个数组: $B = array( array("firstnam" =>"A", "lastname"=>"D", "grade" => "k1", "score" => 50), array("firstnam" =>"B", "lastname"=>"C", "grade" => "k4", "score" => 20), array("firstnam" =>"C", "lastname"=>

我有这样一个数组:

   $B = array(
    array("firstnam" =>"A", "lastname"=>"D", "grade" => "k1", "score" => 50),
    array("firstnam" =>"B", "lastname"=>"C", "grade" => "k4", "score" => 20),
    array("firstnam" =>"C", "lastname"=>"B", "grade" => "k3", "score" => 10),
    array("firstnam" =>"D", "lastname"=>"A", "grade" => "k2", "score" => 80)
);

如果要按h4对h1-3进行排序,请尝试以下操作:

array_multisort($h4, SORT_NUMERIC, SORT_ASC, $h3, SORT_NUMERIC, SORT_ASC, $h2, SORT_NUMERIC, SORT_ASC, $h1, SORT_NUMERIC, SORT_ASC);

如果这不是您想要的,请尝试重新表述您的问题。

如果您试图按h4对h1-3进行排序,请尝试以下方法:

array_multisort($h4, SORT_NUMERIC, SORT_ASC, $h3, SORT_NUMERIC, SORT_ASC, $h2, SORT_NUMERIC, SORT_ASC, $h1, SORT_NUMERIC, SORT_ASC);
public function sortByHeader($columns, $sortOrder=1/* or -1 for desc */) {
    $this->sort_columns = $columns;
    $this->sort_order = $sortOrder;
    uasort($this->data, array($this, "cmp"));
}

public function cmp($a, $b) {
    foreach ($this->sort_columns as $column) {
        // It's also important to check datatypes if you have string and it in diff columns
        if ($a[$column] > $b[$column]) {
            return $this->sort_order;
        }
        if ($a[$column] < $b[$column]) {
            return -$this->sort_order;
        }
    }
    return 0;
}
如果这不是您想要的,请尝试重新表述您的问题。

公共函数sortByHeader($columns,$sortOrder=1/*或-1表示desc*/){
public function sortByHeader($columns, $sortOrder=1/* or -1 for desc */) {
    $this->sort_columns = $columns;
    $this->sort_order = $sortOrder;
    uasort($this->data, array($this, "cmp"));
}

public function cmp($a, $b) {
    foreach ($this->sort_columns as $column) {
        // It's also important to check datatypes if you have string and it in diff columns
        if ($a[$column] > $b[$column]) {
            return $this->sort_order;
        }
        if ($a[$column] < $b[$column]) {
            return -$this->sort_order;
        }
    }
    return 0;
}
$this->sort_columns=$columns; $this->sort\u order=$sortOrder; uasort($this->data,array($this,“cmp”)); } 公共职能cmp(a$b){ foreach($this->sort_columns as$column){ //如果您在diff列中有string和It,那么检查数据类型也很重要 如果($a[$column]>$b[$column]){ 返回$this->sort\u订单; } 如果($a[$column]<$b[$column]){ return-$this->sort\u order; } } 返回0; }
uasort允许使用自定义回调对数据进行排序。请参见PHP man以获取参考

公共函数sortByHeader($columns,$sortOrder=1/*或-1以获取desc*/){
$this->sort_columns=$columns;
$this->sort\u order=$sortOrder;
uasort($this->data,array($this,“cmp”));
}
公共职能cmp(a$b){
foreach($this->sort_columns as$column){
//如果您在diff列中有string和It,那么检查数据类型也很重要
如果($a[$column]>$b[$column]){
返回$this->sort\u订单;
}
如果($a[$column]<$b[$column]){
return-$this->sort\u order;
}
}
返回0;
}

uasort允许使用自定义回调对数据进行排序。参见PHP man以供参考

好的算法做什么?我不明白问题是什么…你如何表示你的数据?每排?你能多发一点你的代码吗?好的算法做什么?我不明白问题是什么…你如何表示你的数据?每排?你能多发布一点你的代码吗?是的,谢谢,我不知道这个内置函数,很好。@Unsigned code labsyes,谢谢,我不知道这个内置函数,很好。@Unsigned code labs为什么需要$columns作为数组?如果$columns=array(“score”)或array(“score”,“lastname”)有什么问题;如果得分值相同,则数据将按姓氏排序。我忘了为每个排序列添加方向,这将更有帮助。此外,您不能使用><符号表示字符串,应改用strcmp。为什么需要$columns作为数组?如果使用$columns=array(“score”)或array(“score”,“lastname”)会出现什么问题;如果得分值相同,则数据将按姓氏排序。我忘了为每个排序列添加方向,这将更有帮助。此外,不能对字符串使用><符号,应改用strcmp。