Maison développement back-end tutoriel php PHP 多维数组排序 保持索引对应关系 巧用 uasort_PHP教程

PHP 多维数组排序 保持索引对应关系 巧用 uasort_PHP教程

Jul 13, 2016 am 10:30 AM
web开发 企业安全 信息技术 安全软件 数据库 移动开发 系统安全 网站安全 网络安全 网络技术 软件开发

实际开发中,多多少少都会遇到数组的排序问题,除了常规的写简单的排序算法,PHP 还提供了内置数组排序函数,本次重点分享一下:uasort  使用用户自定义的比较函数对数组中的值进行排序并保持索引关联,可排序多维数组,本文重点讲解此函数。      

 
 
 
uasort 函数
 
参数类型:bool uasort ( array &$array, callable $cmp_function)
 
本函数对数组排序并保持索引和单元之间的关联。
 
主要用于对那些单元顺序很重要的结合数组进行排序。比较函数是用户自定义的。
 
成功时返回 TRUE, 或者在失败时返回 FALSE。
 
 
 
数组排序实例(非class中):
 
复制代码
 1 /**
 2  * 自定义排序函数
 3  * @param $param1
 4  * @param $param2
 5  * @return 0(不移动) 1(正向调换顺序) -1(逆向调换顺序)
 6  */
 7 
 8 function my_sort($param1, $param2){
 9     if($param1 == $param2) return 0;
10     else return $param1 > $param2 ? 1 : -1;
11 }
12 
13 $arr = array(
14             'a'=>'20',
15             'b'=>'1',
16             'c'=>'10',
17             'd'=>'5',
18             'e'=>'21',
19             'f'=>'4',
20             'g'=>'3',
21         );
22 
23 uasort($arr, 'my_sort');
24 
25 var_dump($arr);
26 
27 /*输出值
28 array (size=7)
29   'b' => string '1' (length=1)
30   'g' => string '3' (length=1)
31   'f' => string '4' (length=1)
32   'd' => string '5' (length=1)
33   'c' => string '10' (length=2)
34   'a' => string '20' (length=2)
35   'e' => string '21' (length=2)
36 */
复制代码
 
 
多维数组排序实例(非class中):
 
 
 
复制代码
/**
 * 自定义排序函数
 * @param $param1
 * @param $param2
 * @return 0(不移动) 1(正向调换顺序) -1(逆向调换顺序)
 */
 
function my_sort($param1, $param2){
    if($param1['value'] == $param2['value']) return 0;
    else return $param1['value'] > $param2['value'] ? 1 : -1;
}
 
$arr = array(
            'a'=>array('key'=>'定义1', 'value'=>'20'),
            'b'=>array('key'=>'定义2', 'value'=>'1'),
            'c'=>array('key'=>'定义3', 'value'=>'10'),
            'd'=>array('key'=>'定义4', 'value'=>'5'),
            'e'=>array('key'=>'定义5', 'value'=>'21'),
            'f'=>array('key'=>'定义6', 'value'=>'4'),
            'g'=>array('key'=>'定义7', 'value'=>'3'),
        );
 
uasort($arr, 'my_sort');
 
var_dump($arr);
 
/*输出值
array (size=7)
  'b' => 
    array (size=2)
      'key' => string '定义2' (length=7)
      'value' => string '1' (length=1)
  'g' => 
    array (size=2)
      'key' => string '定义7' (length=7)
      'value' => string '3' (length=1)
  'f' => 
    array (size=2)
      'key' => string '定义6' (length=7)
      'value' => string '4' (length=1)
  'd' => 
    array (size=2)
      'key' => string '定义4' (length=7)
      'value' => string '5' (length=1)
  'c' => 
    array (size=2)
      'key' => string '定义3' (length=7)
      'value' => string '10' (length=2)
  'a' => 
    array (size=2)
      'key' => string '定义1' (length=7)
      'value' => string '20' (length=2)
  'e' => 
    array (size=2)
      'key' => string '定义5' (length=7)
      'value' => string '21' (length=2)
*/
复制代码
 
 
 
 
 
 
class中排序,为了方便以二维数组为例:
 
uasort($arr1, array($this, 'public_my_sort'));
 
uasort($arr2, array('self', 'self_my_sort'));
 
复制代码
class myClassSort{
    
    /**
     * 排序主方法
     * @param $arr1  self静态排序
     * @param $arr2  this排序
     * @return 排序后的数组
     */
    public function main($arr1 = array(), $arr2 = array()){
    
        uasort($arr1, array($this, 'public_my_sort'));
        
        uasort($arr2, array('self', 'self_my_sort'));
        
        return array('arr1'=>$arr1, 'arr2'=>$arr2);
    
    }
    
    /**
     * 自定义排序函数
     * @param $param1
     * @param $param2
     * @return 0(不移动) 1(正向调换顺序) -1(逆向调换顺序)
     */
    private static function self_my_sort($param1, $param2){
        if($param1['value'] == $param2['value']) return 0;
        else return $param1['value'] > $param2['value'] ? 1 : -1;
    }
    
    
    //同上
    public function public_my_sort($param1, $param2){
        if($param1['value'] == $param2['value']) return 0;
        else return $param1['value'] > $param2['value'] ? 1 : -1;
    }
    
}
 
$arr = array(
            'a'=>array('key'=>'定义1', 'value'=>'20'),
            'b'=>array('key'=>'定义2', 'value'=>'1'),
            'c'=>array('key'=>'定义3', 'value'=>'10'),
            'd'=>array('key'=>'定义4', 'value'=>'5'),
            'e'=>array('key'=>'定义5', 'value'=>'21'),
            'f'=>array('key'=>'定义6', 'value'=>'4'),
            'g'=>array('key'=>'定义7', 'value'=>'3'),
        );
        
$myClassSort = new myClassSort();
 
var_dump($myClassSort->main($arr, $arr));
 
/*输出结果同以上实例*/
复制代码
 
 
 
 
类似函数扩展
 
   array_multisort 对多个数组或多维数组进行排序,但是最终填入使用的还是具体一维数组
 
   arsort  对一维数组进行逆向排序并保持索引关系,保持索引对应关系
 
   asort  对一维数组进行正向排序并保持索引关系,保持索引对应关系
 
   krsort  对数组按照键名逆向排序,保持索引对应关系
 
   ksort  对数组按照键名正向排序,保持索引对应关系
 
   natcasesort  用“自然排序”算法对一维数组进行不区分大小写字母的排序,可以用来排序数组内容中字母数字混合的情况,保持索引对应关系
 
   natsort  用“自然排序”算法对一维数组排序,区分大小写字母,可以用来排序数组内容中字母数字混合的情况,保持索引对应关系
 
   rsort  对一维数组逆向排序,不保持索引对应关系
 
   sort  对一维数组正向排序,不保持索引对应关系
 
   uasort  使用用户自定义的比较函数对数组中的值进行排序并保持索引关联,可排序多维数组,本文重点讲解此函数
 
   uksort  使用用户自定义的比较函数对数组中的键名进行排序
 
   usort  使用用户自定义的比较函数对数组中的值进行排序,不保持索引关联
 
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/767108.htmlTechArticle实际开发中,多多少少都会遇到数组的排序问题,除了常规的写简单的排序算法,PHP 还提供了内置数组排序函数,本次重点分享一下:uas...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées

Quels sont les avantages et les inconvénients du C++ par rapport aux autres langages de développement web ? Quels sont les avantages et les inconvénients du C++ par rapport aux autres langages de développement web ? Jun 03, 2024 pm 12:11 PM

Quels sont les avantages et les inconvénients du C++ par rapport aux autres langages de développement web ?

Comment Go WebSocket s'intègre-t-il aux bases de données ? Comment Go WebSocket s'intègre-t-il aux bases de données ? Jun 05, 2024 pm 03:18 PM

Comment Go WebSocket s'intègre-t-il aux bases de données ?

Comment gérer les erreurs de connexion à la base de données en PHP Comment gérer les erreurs de connexion à la base de données en PHP Jun 05, 2024 pm 02:16 PM

Comment gérer les erreurs de connexion à la base de données en PHP

Comment utiliser les fonctions de rappel de base de données dans Golang ? Comment utiliser les fonctions de rappel de base de données dans Golang ? Jun 03, 2024 pm 02:20 PM

Comment utiliser les fonctions de rappel de base de données dans Golang ?

Comment gérer les connexions et les opérations de base de données en utilisant C++ ? Comment gérer les connexions et les opérations de base de données en utilisant C++ ? Jun 01, 2024 pm 07:24 PM

Comment gérer les connexions et les opérations de base de données en utilisant C++ ?

Connexions PHP à différentes bases de données : MySQL, PostgreSQL, Oracle et plus Connexions PHP à différentes bases de données : MySQL, PostgreSQL, Oracle et plus Jun 01, 2024 pm 03:02 PM

Connexions PHP à différentes bases de données : MySQL, PostgreSQL, Oracle et plus

See all articles