博客列表 >数组排序方法总结、字符串长度计算、 字符串与数组之间的转换 、 字符串的查找与替换 2018-4-18

数组排序方法总结、字符串长度计算、 字符串与数组之间的转换 、 字符串的查找与替换 2018-4-18

木易阳的博客
木易阳的博客原创
2018年05月02日 14:54:38870浏览

第一部分:常用数组函数

数组的排序
 * 注意:
 * 1.数组为引用传参,所有原数据会被改写;
 * 2.数组元素的类型建议全部相同,否则会产生不可预见结果
 * 3.排序成功返回: true,失败返回: false
 *
 * 可用常量:
 *  1.SORT_REGULAR: [默认]正常比较单元(不改变类型)
 *  2.SORT_NUMERIC: 单元被作为数字来比较
 *  3.SORT_STRING: 单元被作为字符串来比较
 *  4.SORT_NATURAL: 单元以“自然的顺序”对字符串进行排序
 *  5.SORT_FLAG_CASE: 不区分大小写排序字符串
 *  
 * 一. 正序: associate(关联的), key(键),前面加上这二个单词的首字母表示
 * 1. sort(&$arr, $flag) 按值升序排列,键名按索引方式重置
 * 2. asort(&$arr,$flag) 按值升序排列,键名保留与值的对应
 * 3. ksort(&$arr,$flag) 按键名升序排列,适合于关联数组,键值对应关系不变
 *
 * 二、反序: reversal 反转,函数前添加一个r即可
 * 1. rsort(&$arr, $flag):对数组逆向排序
 * 2. arsort(&$arr, $flag):对数组进行逆向排序并保持索引关系
 * 3. krsort(&$arr, $flag):对数组按照键名逆向排序
 *
 * 三、自定义回调函数进行排序: usort(&$arr, functoin($a, $b){ #code })
 * 注意: 仅对值进行排序,忽略键名(即会重置键名)

举例子:

实例

$arr = ['id'=>3, 'name'=>'zhu', 'course'=>'php', 'grade'=>60, 5=>true];
echo '<pre>';
echo '<p>原始数组:</p>';
print_r($arr);
echo '<hr color="red">';

运行实例 »

点击 "运行实例" 按钮查看在线实例

//1.sort(&$arr, $flag):正序且键名重置
// sort($arr);
// sort($arr, SORT_REGULAR);  //忽略类型,其实就是按类型分组,仅在分组中对同类型数据进行排序
// sort($arr, SORT_NUMERIC);  //全部视为数值类型,字母全转为0,true转为1,
// sort($arr, SORT_STRING);   //全部视为字符类型,因为数字的ASCII码要小于字母,所有排在前面
// sort($arr, SORT_NATURAL);  //自然排序,与SORT_STRING结果一致
// sort($arr, SORT_FLAG_CASE); //忽略大小写,PHP5.4+以上支持
// print_r($arr);

//2.asort($arr, $flag):正序且键名保留
// asort($arr);
//等价于
// asort($arr, SORT_REGULAR);  //忽略类型,但是键值对应关系得到了保留
// print_r($arr);

//3.ksort(&$arr, $flat):键名正序排列
// ksort($arr);  //因为忽略了类型,5与其它键名类型不同,所以在最后面
// ksort($arr,SORT_STRING); //全部视为字符类型,5的ASCII码在普通字母之前
// ksort($arr,SORT_NUMERIC); //全部视为数值,则字母全转为0,5就是排到了最后面
// print_r($arr);

//4.rsort(&$arr):数组反转,忽略原键名
// rsort($arr); //忽略类型分组排序
// print_r($arr);

//5. arsort(&$arr):数组反转,保留键名
// arsort($arr, SORT_STRING); //键值对应关系不变,反转是指由大到小,所以ASCII小的数字字符排到了后面
// print_r($arr);

//6. krsort(&$arr): 键名反转排序
// krsort($arr, SORT_STRING); //键名全部视为字符类型,按字母表逆序排列键名
// print_r($arr);

//7. usort(&$arr, callback()): 用户自定义排序方式
//这里介绍一个非常简单的例子,更复杂的案例,会在实战中进行介绍

实例

$arr1 = [10, 4, 22, 99, 35, 18];
//下面我们用自定义回调方法对$arr1进行由小到大排列
usort($arr1, function($a, $b) {
	$res = $a - $b; 
	if ($res == 0) {
		return 0;
	} else if ($res > 0) {
		return true;
	} else {
		return false;
	}
});

print_r($arr1);

运行实例 »

点击 "运行实例" 按钮查看在线实例

第二部分:计算字符串长度

实例

<?php 
echo '<p>字符串函数(一):长度计算</p><hr color="green">';
/**
 * 1.strlen($str)
 * 2.mb_strlen($str, $encoding)
 */

$siteName = 'php中文网';
//获取内部字符编码集
$encoding =   mb_internal_encoding();
echo '内部字符编码集: ',$encoding,'<br>';

//1.strlen($str):获取字节表示的字符串长度
//utf8模式下,一个中文字符用三个字节表示
echo strlen($siteName),'<br>';

//2.mb_strlen($str, $encoding) :获取字符数表示的长度
echo mb_strlen($siteName, $encoding),'<br>';
//省略第二个参数,会使用系统默认的字符编码集,当前是utf-8
echo mb_strlen($siteName),'<br>';  //返回值不变

运行实例 »

点击 "运行实例" 按钮查看在线实例

第三部分:字符串比较运算

实例

<?php 
echo '<p>字符串函数(二):比较运算</p><hr color="green">';
/**
 * 1.strcmp($str1, $str2):二进制安全字符串比较
 * 2.strncmp($str1, $str2, $length):比较开头指定长度的是否相待
 * 3.strcasecmp($str1, $str2):二进制安全字符串比较,不区分大小写
 * 4.strncasecmp($str1, $str2):二进制安全字符串比较,不区分大小写
 * 5.strspn($str,$mark,$start,$length):获取匹配遮罩的起始子字符串的长度
 * 6.strcspn($str,$mark,$start,$length):获取不匹配遮罩的起始子字符串的长度
 */

$str1 = 'php中文网';
$str2 = 'PHP中文网';

//1.strcmp($str1, $str2):字符串比较,相等返回0,大于返回>0,否则返回<0
echo strcmp($str1, $str2) == 0 ? '相等' : '不相等', '<br>'; 

//2.strncmp($str, $str2, $n):比较开头指定长度是否相等
echo strncmp($str1, $str2, 3) == 0 ? '相等' : '不相等', '<br>';

//3.strcasecmp($str1, $str2):不区分大小写的字符串比较,相等返回0,大于返回>0,否则返回<0
echo strcasecmp($str1, $str2) == 0 ? '相等' : '不相等', '<br>'; 

//4.strncasecmp($str1, $str2):不区分大小写比较开头指定长度是否相等
echo strncasecmp($str1, $str2,3) == 0 ? '相等' : '不相等', '<br>'; 

//5.strspn($str, $mark, $start, $length):
//计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度
//$str1:要比较的字符串, $mark:类似于集合,返回匹配的数量
echo strspn('15705519989', '1234567890'),'<br>';  //返回11
//可以指定开始比较的位置与长度
echo strspn('15705519989', '1234567890', 4, 4),'<br>';//返回4
//只比较$str中的第一个子串,后面的全部忽略掉,返回11
echo strspn('15705519989 18955123344 111abc', '1234567890'),'<br>';
//返回3,因为第一个字串中只有前三个是属于数字集合中的数据
echo strspn('157php 18955123344 111abc', '1234567890'),'<br>';

//例如手机号必须是纯数字字符串,要求用户必须输入的是纯数字的字符串
$phone = '13899886767';
// $phone = '1389988php6767';
$mark = '0123456789';
//分析,如果正确匹配,那么strspn()必返回11,因为手机号是11,与strlen($phone)正好相等
echo strlen($phone)==strspn($phone, $mark) ? '全数字' : '必须全为数字';
//等价于: strspn(substr($subject, $start, $length), $mask)

//6.strcspn()与strspn()功能正好相反

运行实例 »

点击 "运行实例" 按钮查看在线实例

第四部分:字符串与数组之间的转换

实例

<?php 
echo '<p>字符串函数(三):字符串与数组之间的转换</p><hr color="green">';
/**
 * 1.str_split($str,$length=1),按字符数量,将字符串分割为数组,默认为1
 * 2.explode($delimiter,$str,$num):按分隔符,将字符串分割为数组,可指定数组元素数量
 * 3.implode($glue, $str):按分隔符,将一维数组拼装成字符串,默认用空格分隔
 */
echo '<pre>';
$str = 'html,css,jquery,php,mysql,thinkphp';
echo '<p>原始字符串:'.$str.'</p>';
//1.str_split($str,$length=1)按字符数量,将字符串分割为数组,默认为1
// print_r(str_split($str)); //默认一个字符转为数组中的一个元素
// print_r(str_split($str,5)); //5个一组进行转换

//2.explode($delimiter,$str,$num):按分隔符,将字符串分割为数组,可指定数组元素数量
print_r(explode(',',$str)); //用','号进行分割字符串
print_r(explode(',',$str,5)); //指定数组必须是5个元素,最后一个元素保存全部剩余数据

//3.implode($glue, $str):按分隔符,将一维数组拼装成字符串,默认用空格分隔
$arr2 = explode(',', $str);
echo implode(' ', $arr2), '<br>'; //用空格分隔
echo implode(',',$arr2), '<br>'; //用,分隔
echo implode('--',$arr2), '<br>'; //用--分隔

运行实例 »

点击 "运行实例" 按钮查看在线实例

第三部分;字符串函数删除或填充指定内容

实例

<?php 
echo '<p>字符串函数(五):删除或填充指定内容</p><hr color="green">';
/**
 * 1.ltrim($str,$mask):从左边删除空格或指定字符
 * 2.rtrim($str,$mask):从右边删除空格或指定字符
 * 3.trim($str,$mask):从左右边删除空格或指定字符
 * 4.str_pad($str,$length,$mark,CONST):使用特定字符将字符串填充到指定长度
 * 可使用三个常量指定方向: STR_PAD_LEFT/STR_PAD_RIGHT/STR_PAD_BOTH,默认用空格
 * 5.chunk_split($str, $length,[$end]):将字符串按大小切成小块,可指定分割符
 */
$str = '  php中文网   '; //左边二个空格,右边三个空格
$str1 = 'www.php.cn';
echo $str,'<br>';
echo strlen($str),'<br>';
echo '<hr color="red">';
//1.ltrim($str,$mask):从左边删除空格或指定字符
echo ltrim($str),'<br>';
echo strlen(ltrim($str)),'<br>';
echo $str1,'<br>';
echo strlen($str1),'<br>';

echo ltrim($str1, 'www.'),'<br>';
echo strlen(ltrim($str1, 'www.')),'<br>';

//2.rtrim($str,$mask):从右边删除空格或指定字符
$str = '  php中文网   ';
echo rtrim($str),'<br>';
echo strlen(rtrim($str)),'<br>';

//3.trim($str,$mask):从左右边删除空格或指定字符
$str = '  php中文网   ';
echo trim($str),'<br>';
echo strlen(trim($str)),'<br>';

echo '<hr>';
//4.str_pad($str,$length,$mark,CONST):使用特定字符将字符串填充到指定长度
$str1 = 'www.php.cn';
echo strlen($str1),'<br>';
echo str_pad($str1, 20, '*', STR_PAD_RIGHT),'<br>'; //默认向右填充
echo str_pad($str1, 20, '*', STR_PAD_LEFT), '<br>'; //向左填充
echo str_pad($str1, 20, '*', STR_PAD_BOTH), '<br>'; //二边填充

echo '<hr>';
//5.chunk_split($str, $length,[$end]):将字符串按大小切成小块,可指定分割符
$str1 = '12345678901234567890';
echo chunk_split($str1, 7, ','),'<br>';
echo chunk_split($str1, 7, '<br>');

运行实例 »

点击 "运行实例" 按钮查看在线实例

第四部分:字符串函数查找与替换

实例

<?php 
echo '<p>字符串函数(六):查找与替换</p><hr color="green">';

/**
 * 1.strpos($str1,$str2, $offset)查找$str1在$str1中首次出现的位置
 * 2.strstr($str1, $str2),如果$str2是$str1的子串,返回子串,返回否则false
 * 如果确定$str2是$str1的子串,推荐使用strpos(),速度更快
 * 3.str_replace($str1, $str2, $str3, $num):子串替换,$num是替换次数
 * 4.substr_replace($str1,$str2,$str3,$start, $length):替换字符串的子串
 */

$str = 'www.php.cn';
//1.strpos($str,$needle, $offset)查找字符串首次出现的位置
echo strpos($str, 'p'),'<br>'; //默认从头开始查找
echo strpos($str, 'p', 5),'<br>'; //从索引5开始查找

//2.strstr($str1, $str2),如果$str2是$str1的子串,返回子串,返回否则false
echo strstr($str, 'php'),'<br>';  //返回子串及后面部分
echo strstr($str, 'php', true),'<br>'; //参数true,会返回子串前面部分

echo '<hr>';
//3.str_replace($str1, $str2, $str3, $num):子串替换,
echo str_replace('www','http://www',$str), '<br>';

echo '<hr>';
//4.substr_replace($str1,$str2,$str3,$start, $length):替换字符串的子串
//在$str中,从第5个索引位置起的2个字符,用'pppph'进行替换
echo substr_replace($str,'pppph', 5, 2);

运行实例 »

点击 "运行实例" 按钮查看在线实例




声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议