数组的增删改查
数组常用函数:
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);
值重新按从大到小的顺序排列,键从0开始重新排,不保留原本的键值对关系
$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
';
rsort($arr);//值的降序排列
print_r($arr);
值重新按从小到大的顺序排列,值保留原本对应的键
$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
';
asort($arr);//值的升序排列
print_r($arr);
值重新按从大到小的顺序排列,值保留原本对应的键
$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
';
arsort($arr);//值的降序排列
print_r($arr);
键重新按从小到大的顺序排列,值保留原本对应的键
第一行是用原本的数组,第二行是用arsort();排过的,再用ksort排序的话,是把键重新从小打大排序,等于又还原成了原本的数组的样子
$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
';
arsort($arr);
print_r($arr);
echo '
';
ksort($arr);
print_r($arr);
键重新按从小到大的顺序排列,值保留原本对应的键
$arr = [11,22,3,9,90];
print_r($arr);//未排序的原数组
echo '
';
arsort($arr);
print_r($arr);
echo '
';
krsort($arr);
print_r($arr);
值重新按ascii码从小到大的顺序排列,不保留原本对应的键
$arr = ['ab','acdd','a','decdf'];
print_r($arr);
echo '
';
sort($arr);
print_r($arr);
根据字符串的长度进行升序排序,不保留原本的键值对的对应关系
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);
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的顺序调换,就成了从大到小排列
自然排序法排出来的数组,如果有大写字母的话,会被排在前面,因为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);
$arr = ['file1.php','File11.php','file2.php','file22.php'];
print_r($arr);
echo '
';
asort($arr); //标准排序方法
print_r($arr);
echo '
';
natcasesort($arr);//自然排序法,排出来就像数自然数一样的顺序
print_r($arr);
按之前的方法:
array_push()末尾压入一个或多个单元(在数组末尾增加值)
$class1 = ['张三', '李四', '王五'];
$class2 = ['李雷', '韩梅梅', 'Lucy'];
$class = array_push($class1, $class2);
print_r($class1);
结果:
$class1被当做$class2的子集加入进去了:
array_merge($ar1, $arr2,...)合并数组 且不会增加数组的维度,被合并的数组的值按括号中添加数组的顺序排列
$class1 = ['张三', '李四', '王五'];
$class2 = ['李雷', '韩梅梅', 'Lucy'];
$class = array_merge($class1, $class2);
print_r($class);
源码
count();这样的写法会把数组中的二维数组当成一个单元
count(value, true);这样的写法会递归的把数组中的所有值全部找出来(包括多维数组中的值也会被全部统计出来)
$class1 = ['张三', '李四', '王五',['李雷', '韩梅梅', 'Lucy']];
print_r(count($class1));
这个返回值之所以是7是因为他自己本身也是一个值,也计算在内了
但是一般不会传第二个值的(true,flase,null)
$class1 = ['张三', '李四', '王五',['李雷', '韩梅梅', 'Lucy']];
print_r(count($class1, true));
手册上的递归例子:
$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);
不会改变数组原本的结构,移除后的值空出的索引不会被填补,原本的数组也不会被改变,只是新生成了一个新的没有重复项的数组
$arr = range('a', 'z');
//要么全部大写,要么全部小写,不能大小写混着写
//如果大小写混写,他会按照ascii的值挨着排出来,其中会有其他的数字、符号等出现
print_r($arr);
源码:
案例:输出英文字母所有的大小写:
$arr1 = range('a', 'z');
$arr2 = range('A', 'Z');
$arr = array_merge($arr1,$arr2);//合并数组
print_r($arr);
源码:
输出数字的范围:
$arr = range(0,9);
print_r($arr);
案例:
输出数组中的值,并且在每个值中间加一个空格:
$stu = ['张三', '男', 18];
$str = '';
foreach($stu as $v){
$str .= $v.' ';//.连接字符串
}
echo $str;
源码:
用上面的写法有一个弊端就是最后一个值的后面也会加一个空格,可以用trim();解决
$stu = ['张三', '男', 18];
$str = '';
foreach($stu as $v){
$str .= $v.' ';//.连接字符串
}
echo trim($str);//trim — 去除字符串首尾处的空白字符(或者其他字符)
18后面的空格已经没有了:
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中字符串的表示可以用双引号,也可以用单引号,但是两者之间有些区别。
// 字符串中有变量的时候,单引号仅输出变量名,而不是值:
";
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 =$color?>
//当然还有其他输出方式: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);