利用PHP函数计算中英文字符串长度

 更新时间:2016年11月25日 17:05  点击:2058
大家知道英文字符占一个字节,而中文字符gbk占两个字符,utf8占三个字符,很多人印象中php计算字符串长度就是strlen()函数,其实不然,它计算的是字节的长度而非字符的长度,那么如何获取一个字符串中字符的长度呢?还有有mb_strlen()

例子

 代码如下 复制代码

echo $str = 'PHP点点通';
 
echo strlen($str); //3*1+3*3=12
echo mb_strlen($str, 'gb2312'); //3*1+3*2=9
echo mb_strlen($str, 'utf-8'); //6


可恶的是,mb系列的函数并不是PHP核心函数,默认没有开启的,还有一个超简单的方法,通过正则将字符串分解为字符个体,计算字符的个数即为字符串的长度:www.111cn.net

 代码如下 复制代码

<?php
function _strlen($str)
{
        preg_match_all("/./us", $str, $matches);
        return count(current($matches));
}
 
echo _strlen("PHP点点通");  //6

 

最近由于项目要求做一个统计功能,统计当前日期之前的前30天的记录。功能挺简单,下面将本次实现的方法和大家分享一下,方便有需要的朋友们。

其实主要就是用到了php的strtotime这个函数,strtotime('n day'),示例如下:

 代码如下 复制代码

$days=array();

for($i=0;$i<=7;$i++){ //这里数字根据需要变动
 

$days[]=date("Y-m-d",strtotime('-'.$i.'day'));

}

echo '<pre>';print_r($days);

结果将显示如下:

 代码如下 复制代码

Array
(
    [0] => 2014-03-21
    [1] => 2014-03-20
    [2] => 2014-03-19
    [3] => 2014-03-18
    [4] => 2014-03-17
    [5] => 2014-03-16
    [6] => 2014-03-15
    [7] => 2014-03-14
)

你可能所有不知道获取短网址跳转后的真实地址我们可以使用get_headers()函数来实现,下面我一起来看我总结的一些例子。

获取到一个短连接,需要将短连接转换成真实的网址,通过查资料,发现 PHP 提供了一个函数 get_headers() ,可以完成这个任务,先把 头部信息获取到,然后再分析跳转地址即可

利用get_headers() 函数获取http头
php 自带的get_headers()取得服务器响应一个 HTTP 请求所发送的所有标头。 获取301状态肯定没问题。

例子

 代码如下 复制代码

$url = 'http://t.cn/h5mwx';
$headers = get_headers($url, TRUE);

print_r($headers);

//输出跳转到的网址
echo $headers['Location'];

附:

Array
(
    [0] => HTTP/1.1 302 Moved Temporarily
    [Location] => http://www.111Cn.net
    [Content-Type] => Array
        (
            [0] => text/html;charset=UTF-8
            [1] => text/html;charset=utf-8
        )

    [Server] => Array
        (
            [0] => weibo
            [1] => BWS/1.0
        )

    [Content-Length] => Array
        (
            [0] => 203
            [1] => 16424
        )

    [Date] => Array
        (
            [0] => Thu, 12 Dec 2013 10:42:25 GMT
            [1] => Thu, 12 Dec 2013 10:42:25 GMT
        )

    [X-Varnish] => 2893360335
    [Age] => 0
    [Via] => 1.1 varnish
    [Connection] => Array
        (
            [0] => close
            [1] => Close
        )
)

好了我们看一个获取短网址跳转之前的网址

 代码如下 复制代码

$header = get_headers($url, 1);
if (strpos($header[0], '301') || strpos($header[0], '302')) {
if (is_array($header['Location'])) {
return $header['Location'][count($header['Location'])-1];
} else {
return $header['Location'];
}
} else {
return $url;
}

Warning: Invalid argument supplied for foreach() 的中文意思是说foreach需要是一个数组而给它的是一个无效的参数。

在没有购物商品直接进入购物车时竟然出现警告提示

php下foreach()错误提示Warning: Invalid argument supplied for foreach()

错误提示:

Warning: Invalid argument supplied for foreach() in E:wampwwwmyshopcart.php on line 95
 

解决方案:就是在循环前面加上判断

直接使用is_array判断给的值是不是为数组

 代码如下 复制代码

if(is_array($items) && !empty($items)){

foreach( )

或者 强制转换数据类型

 代码如下 复制代码

foreach((array)$v as $k1 => $v1) {
     $edu[$k1][$k] = my_h($v1);// v1是最终要入库的数据,进行转义处理
}

在php中测试字符串长度的函数是strlen,但今天我发现使用isset更加的更高效哦,口说不你不相信下面我举两个例子来给各位看看。

学PHP的都了解,在PHP中获取字符串有一个strlen自带函数;

这里和大家分享一个在一些特定情况下判断字符串长度较为高效的方式;

来看下面两段代码的执行效率吧,自己理解理解代码的执行思路:

 代码如下 复制代码

<?php 

   //使用strlen方式 

   $arr = '123456'; 

   $sTime = microtime(1); 

   if(strlen($arr) > 6){ 

    // echo 1; 

  }     

   echo microtime(1) - $sTime; 

  // 输出:0.00035595893859863 

 /*-------------------------------------*/

   //使用isset($arr{})方式 

   $arr = '123456'; 

   $sTime = microtime(1); 

   if(!isset($arr{6})){ 

    // echo "1rn"; 

   } 

   echo microtime(1) - $sTime; 

// 输出:0.00019097328186035

[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 使用PHP similar text计算两个字符串相似度

    在网站开发中,我们经常使用php similar text 计算两个字符串相似度;1,similar_text的用法 如果我想计算"ly89cn"和"ly89"的相似程度,有两种表示方法复制代码 代码如下: echo similar_text('ly89cn', 'ly89'); ...2015-11-08
  • C#实现将字符串转换成日期格式的方法

    这篇文章主要介绍了C#实现将字符串转换成日期格式的方法,涉及C#操作时间及字符串的相关技巧,非常简单实用,需要的朋友可以参考下...2020-06-25