按特定键值排序关联数组

时间:2014-06-17 21:06:23

标签: php arrays codeigniter foreach associative-array

我有以下数组:

   $data=array(
   'Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']
    );

这位于我的Codeigniter控制器索引函数中的每个循环中:

public function index(){

    $query=$this->My_model->get_data();
    foreach ($query as $row)
    {
           $data=array(
           'Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']
            );

    }
}

目前,如果我在$ data上打印__它会产生:

Array ( [Points] => 500 [Name] => Dave Laus ) 
Array ( [Points] => 1200 [Name] => John Smith ) 
Array ( [Points] => 700 [Name] => Jason Smithsonian ) 

但是我想对此进行排序/排序,以便具有最高点的用户首先显示如下:

Array ( [Points] => 1200 [Name] => John Smith ) 
Array ( [Points] => 700 [Name] => Jason Smithsonian ) 
Array ( [Points] => 500 [Name] => Dave Laus ) 

我想通过“Points”键对数组进行排序,以便首先显示具有最高点的用户。我想重新命令数组从最高点到最低点显示。

我尝试过usort和arsort以及ksort。我没有让它发挥作用。

我该怎么做?

我在我的控制器中尝试了这个,但它不起作用,而是错误:

public function index(){

    $query=$this->My_model->get_data();
    foreach ($query as $row)
    {
           $data=array(
           array('Points'=>$points,'Name'=>$row['Name'], 'Phone'=>$row['phone']),
            );

           function cmp ($a, $b) {
        return $a['Points'] < $b['Points'] ? 1 : -1;
        }

        usort($data, "cmp");

            print_r($data);


                //I also tried usort($leaders, array('home', 'cmp')); whcih gave no errors, but was the same result as before, not ordered


        }
    }

3 个答案:

答案 0 :(得分:2)

试试这个:

function cmp ($a, $b) {
    return $a['Points'] < $b['Points'] ? 1 : -1;
}

usort($data, "cmp");

See Demo

答案 1 :(得分:0)

我建议你使用usort function。您必须创建一个回调函数来比较数组的2个元素。您可以在我提供的链接中通过排序过程使用此类回调函数的示例。

答案 2 :(得分:0)

以下函数将允许您使用特定字段以及方向(asc或desc)对给定数组进行排序。 它接受参数

// $field = field / key for sorting
// $array = array to sort
// $direction = ascending or descending sort direction (default is ascending)


function sortBy($field, &$array, $direction = 'asc')
{
    usort($array, create_function(  '$a, $b', '
                                     $a = $a["' . $field . '"];
                                     $b = $b["' . $field . '"];
                                     if ($a == $b) {
                                         return 0;
                                     }

                                     return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1;'));

    return true;
}

现在使用以下代码对数组进行实际排序

sortBy('Points', $data, 'desc'); // sorts in descending order for value of key Points
sortBy('Name', $data, 'asc'); // sorts in ascending order for value of key Name

我建议你看一下以下链接 http://phpave.com/sorting-associative-array-specific-key/