PHP -- 数组--排序sort

    数组的增删改查
    
    
        数组常用函数:
        
        array_values()得到数组的值
        array_keys()的到数组的下标
        array_push()末尾压入一个或多个单元(在数组末尾增加值)
        array_pop()在数组末尾弹出(移除)并返回一个单元
        array_shift()在数组开头移除并返回一个单元
        array_unshift()在数组开头压入(增加)一个或多个单元
        
        
        sort()   升序排序,不保留原本键值对对应关系
        asort()  升序排序,保留原本键值对对应关系
        rsort()  降序排序,不保留原本键值对对应关系
        
        ksort()   对key--索引进行升序排序,对应的值也跟着一起变
        krsort()  对key--索引进行降序排序,对应的值也跟着一起变
        
        arsort()对数组进行逆向排序并保持索引关系 
        
        usort(array, cmp_function);按user--用户自己的方式排序,用这个函数排序要先定义一个函数
        
        
        
        natsort()  nature  自然排序法
        natcasesort(),
        //上面带sort的函数都是排序函数
        
    ------------------------------------------------------- 
        array_merge()合并数组
        array_merge_recursive()
        array_diff()
        adday_diff_assoc()
        array_intersect()
        array_intersect_assoc()

键和值都重新按从小到大的顺序排列

$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
'; sort($arr);//值的升序排列 print_r($arr);
image.png

值重新按从大到小的顺序排列,键从0开始重新排,不保留原本的键值对关系

$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
'; rsort($arr);//值的降序排列 print_r($arr);
image.png

值重新按从小到大的顺序排列,值保留原本对应的键

$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
'; asort($arr);//值的升序排列 print_r($arr);
image.png

值重新按从大到小的顺序排列,值保留原本对应的键

$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
'; arsort($arr);//值的降序排列 print_r($arr);
image.png

键重新按从小到大的顺序排列,值保留原本对应的键
第一行是用原本的数组,第二行是用arsort();排过的,再用ksort排序的话,是把键重新从小打大排序,等于又还原成了原本的数组的样子

$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
'; arsort($arr); print_r($arr); echo '
'; ksort($arr); print_r($arr);
PHP -- 数组--排序sort_第1张图片
image.png

键重新按从小到大的顺序排列,值保留原本对应的键

$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
'; arsort($arr); print_r($arr); echo '
'; krsort($arr); print_r($arr);
PHP -- 数组--排序sort_第2张图片
image.png

值重新按ascii码从小到大的顺序排列,不保留原本对应的键

$arr = ['ab','acdd','a','decdf'];
print_r($arr);
echo '
'; sort($arr); print_r($arr);
image.png

根据字符串的长度进行升序排序,不保留原本的键值对的对应关系
strlen(); 用于获取字符串的长度

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。 成功时返回 TRUE, 或者在失败时返回 FALSE。

JS中只有一个排序函数sort,相当于PHP中的usort();

//先获取字符串的长度
//然后将他们进行对比
//当把函数中的大于符号变成小于,这段代码就变成降序排列

function mysort($a, $b){
    $alen = strlen($a);  //strlen: 用于获取字符串的长度
    $blen = strlen($b);
    
    if($alen>$blen){
        return 1;
    }else if($alen==$blen){
        return 0;
    }else{
        return -1;
    }
}

$arr = ['ab','acdd','a','decdf'];
print_r($arr);
echo '
'; usort($arr, 'mysort'); print_r($arr);
image.png


function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

$a = array(3, 2, 5, 6, 1);

usort($a, "cmp");

foreach ($a as $key => $value) {
    echo "$key: $value\n";
}

这个例子的返回值,:

这个函数中return ($a < $b) ? -1 : 1;取小于就是从小到大排列,如果取大于,或者把后面的-1 和 1的顺序调换,就成了从大到小排列

PHP -- 数组--排序sort_第3张图片
image.png

自然排序法排出来的数组,如果有大写字母的话,会被排在前面,因为ascii码大写的数字小,就排在前面:

$arr = ['file1.php','File11.php','file2.php','file22.php'];
print_r($arr);
echo '
'; asort($arr); //标准排序方法 print_r($arr); echo '
'; natsort($arr);//自然排序法,排出来就像数自然数一样的顺序 print_r($arr);
PHP -- 数组--排序sort_第4张图片
image.png

$arr = ['file1.php','File11.php','file2.php','file22.php'];
print_r($arr);
echo '
'; asort($arr); //标准排序方法 print_r($arr); echo '
'; natcasesort($arr);//自然排序法,排出来就像数自然数一样的顺序 print_r($arr);
PHP -- 数组--排序sort_第5张图片
image.png


按之前的方法:

array_push()末尾压入一个或多个单元(在数组末尾增加值)

$class1 = ['张三', '李四', '王五'];
$class2 = ['李雷', '韩梅梅', 'Lucy'];

$class = array_push($class1, $class2);
print_r($class1);

结果:


image.png

$class1被当做$class2的子集加入进去了:


PHP -- 数组--排序sort_第6张图片
image.png


array_merge($ar1, $arr2,...)合并数组 且不会增加数组的维度,被合并的数组的值按括号中添加数组的顺序排列

$class1 = ['张三', '李四', '王五'];
$class2 = ['李雷', '韩梅梅', 'Lucy'];

$class = array_merge($class1, $class2);
print_r($class);
image.png

源码


PHP -- 数组--排序sort_第7张图片
image.png

count();这样的写法会把数组中的二维数组当成一个单元

count(value, true);这样的写法会递归的把数组中的所有值全部找出来(包括多维数组中的值也会被全部统计出来)

$class1 = ['张三', '李四', '王五',['李雷', '韩梅梅', 'Lucy']];

print_r(count($class1));
image.png

这个返回值之所以是7是因为他自己本身也是一个值,也计算在内了
但是一般不会传第二个值的(true,flase,null)

$class1 = ['张三', '李四', '王五',['李雷', '韩梅梅', 'Lucy']];

print_r(count($class1, true));
image.png

手册上的递归例子:

$food = array('fruits' => array('orange', 'banana', 'apple'),
              'veggie' => array('carrot', 'collard', 'pea'));

// recursive count
echo count($food, COUNT_RECURSIVE); // output 8

// normal count
echo count($food); // output 2

$class1 = ['张三', '李四', '李四','王五'];
$class = array_unique($class1);

print_r($class1);
echo '
'; print_r($class);

不会改变数组原本的结构,移除后的值空出的索引不会被填补,原本的数组也不会被改变,只是新生成了一个新的没有重复项的数组


image.png

$arr = range('a', 'z');
//要么全部大写,要么全部小写,不能大小写混着写
//如果大小写混写,他会按照ascii的值挨着排出来,其中会有其他的数字、符号等出现

print_r($arr);
image.png

源码:


PHP -- 数组--排序sort_第8张图片
image.png

案例:输出英文字母所有的大小写:

$arr1 = range('a', 'z');
$arr2 = range('A', 'Z');
$arr = array_merge($arr1,$arr2);//合并数组
print_r($arr);
image.png

源码:


PHP -- 数组--排序sort_第9张图片
image.png

输出数字的范围:

$arr = range(0,9);
print_r($arr);
image.png
PHP -- 数组--排序sort_第10张图片
image.png

案例:
输出数组中的值,并且在每个值中间加一个空格:

$stu = ['张三', '男', 18];
$str = '';
foreach($stu as $v){
    $str .= $v.' ';//.连接字符串
}
echo $str;
image.png

源码:


image.png

用上面的写法有一个弊端就是最后一个值的后面也会加一个空格,可以用trim();解决

$stu = ['张三', '男', 18];
$str = '';
foreach($stu as $v){
    $str .= $v.' ';//.连接字符串
}
echo trim($str);//trim — 去除字符串首尾处的空白字符(或者其他字符)

18后面的空格已经没有了:

image.png

trim();这个函数如果只写一个参数的话,那就是去掉首尾的空白字符,后面加第二个参数的话,第二个参数就是要去掉的字符:

trim();去掉两边的(空白或字符,空白包括回车、换行、制表、空格等)
rtrim(); right-trim 去掉右边的(空格或字符)
ltrim(); left-trim 去掉左边的(空格或字符)

$stu = ['张三', '男', 18];
$str = '';
foreach($stu as $v){
    $str .= $v.'#';//.连接字符串
}
echo $str;
echo '
'; echo trim($str, '#');//trim — 去除字符串首尾处的空白字符(或者其他字符)
PHP -- 数组--排序sort_第11张图片
image.png

//字符串的表示

//PHP中字符串的表示可以用双引号,也可以用单引号,但是两者之间有些区别。

//   字符串中有变量的时候,单引号仅输出变量名,而不是值:

 "; 
echo 'Roses are $color'; 
 ?>

//    输出:

//Roses are red
//Roses are$color

//   转义字符:

//    "\t"  输出时就是制表符, 而‘\t' 就是直接输出 \t 了。  

//    在window下 "\r\n" 是表示换行,可是。。。

//   此外,在PHP中要输出一个换行的时候,只能用“
”,可能这也是它与HTML语言高度结合的结果吧。 // 字符串的拼接 //在java中,我们用加号运算符“+”来连接字符串。 //在 PHP 中,请使用这个点运算符 (.) : //字符串的输出 //在PHP中, 我们一般用echo来输出字符串。 //输出: //This text spans multiple lines. //Echo的简化语法:(可以跟jsp中插入java变量的用法做个比较)

Roses are

//当然还有其他输出方式:print 以及printf(用于控制输出格式)。但是echo的输出速度是最快的。 //字符串处理函数 //PHP也提供与其他语言类似的字符串处理函数,常用的有: chr()          从指定的 ASCII 值返回字符。 explode()        把字符串打散为数组。 str_ireplace()      替换字符串中的一些字符。(对大小写不敏感) str_word_count()   计算字符串中的单词数。 strip_tags()      剥去 HTML、XML 以及 PHP 的标签。 stripos()        返回字符串在另一字符串中第一次出现的位置(大小写不敏感) strlen()        返回字符串的长度。 连接符——点,本身也是一种运算符。它真正的名字应该叫“字符运算符”。作用是把两个字符串连接起来。 **echo 字符 . 变量 . 字符;** //点号把三个值连接成为一个,运行正常。 例: 1.字符串+变量+字符串 echo(""); 2.变量+变量 echo($result.$result); 3.字符串+变量 echo("a".$result);

你可能感兴趣的:(PHP -- 数组--排序sort)