博客列表 >数组排序,字符串长度计算,字符串与数组转换,查找 -4月18日作业

数组排序,字符串长度计算,字符串与数组转换,查找 -4月18日作业

威灵仙的博客
威灵仙的博客原创
2018年04月19日 18:49:16587浏览

实例

实例

<?php 
echo '<h3>常用数组函数(四)</h3><hr color="green">';

/医院
 * 数组的排序
 * 注意:
 * 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>';  //返回值不变


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()功能正好相反,大家可自行举例验证


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>字符串函数(四):html与字符串之间的转换</p><hr color="green">';
/医院
 * 1.addslashes($str):为了数据库查询语句等的需要在某些字符前加上了反斜线:单引号,双引号,反斜线,建议使用DBMS自带的:mysqli_real_escape_string()
 * 2.stripslashes($str):功能与addslashes()相反,去掉字符串中的转义反斜线字符
 * 3.htmlspecialchars($str,FLAG):将特殊字符转换为 HTML 实体
 * &->&"=>"'->&apos/' < < > >
 * 4.htmlspecialchars_decode():将特殊的 HTML 实体转换回普通字符,与上一个是互逆操作
 * 5.strip_tags($str,$allow)从字符串中去除HTML和PHP标记
 */
$str = <<< 'NOWDOC'
<h4>PHP课程介绍</h4>
<ol>
	<li>'PHP'基本语法&案例</li>
	<li>"PHP"的数据库操作</li>
	<li>\PHP面向对象编程</li>
</ol>
NOWDOC;
echo '原始字符串:'.$str.'<hr color="red">';
//1.1.addslashes($str),对单引号,双引号,转义符进行转义
$str1 = addslashes($str);
echo $str1, '<hr>';

//2.stripslashes($str):功能与addslashes()相反,去掉字符串中的转义反斜线字符
$str2 = stripslashes($str1);
echo  $str2,'<hr>';

//3.htmlspecialchars($str,FLAG):将特殊字符转换为 HTML 实体
//&->&"=>"'->&apos/' < < > >
$str3 = htmlspecialchars($str2); //必须查看源码才能看到结果
echo  $str3,'<hr>';

//4.htmlspecialchars_decode():将特殊的 HTML 实体转换回普通字符,与上一个是互逆操作
$str4 = htmlspecialchars_decode($str3); 
echo  $str4,'<hr>';

//5.strip_tags($str,$allow)从字符串中去除HTML和PHP标记
$str5 = strip_tags($str4); //输出的是去掉所有标签的纯文本
$str5 = strip_tags($str4,'<h4>'); //保留<h4>标签,其它的删除
echo  $str5,'<hr>';  
<?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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议