当前位置:  编程技术>php
本页文章导读:
    ▪php分割中英文字符串的几种方法      对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而php函数strlen只能计算出字串的字节数,于是自己实现了几个函数,分享下。 例1,计算字符总长度。 <?php function ccStrLen(.........
    ▪解析php中$_REQUEST的用法      有关php中$_REQUEST的用法,很多资料上都有介绍。 在php手册中,这个变量解释为:"默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。" 注意其中包含cookie的内容,做个测试: <?php $_COOKIE['nam.........
    ▪php数组全排列的非递归算法的实例代码      有关php数组全排列的递归算法的代码,参见文章:php全排列的递归算法的代码 。 以下是php数组全排例的非递归算法实现代码: <?php /** * 取得数组的全排列 * * @param array $sour.........

[1]php分割中英文字符串的几种方法
    来源: 互联网  发布时间: 2013-12-24

对一段文字按照字数进行分割,因为文字中可能是中英文混合的,而php函数strlen只能计算出字串的字节数,于是自己实现了几个函数,分享下。

例1,计算字符总长度。

<?php
function ccStrLen($str) #计算中英文混合字符串的长度
{
$ccLen=0;
$ascLen=strlen($str);
$ind=0;
$hasCC=ereg(”[xA1-xFE]“,$str); #判断是否有汉字
$hasAsc=ereg(”[x01-xA0]“,$str); #判断是否有ASCII字符
if($hasCC && !$hasAsc) #只有汉字的情况
return strlen($str)/2;
if(!$hasCC && $hasAsc) #只有Ascii字符的情况
return strlen($str);
for($ind=0;$ind<$ascLen;$ind++)
{
if(ord(substr($str,$ind,1))>0xa0)
{
$ccLen++;
$ind++;
}
else
{
$ccLen++;
}
}
return $ccLen;
}
?>

例2,从左侧截取字符串。

<?php
function ccStrLeft($str,$len) #从左边截取中英文混合字符串
{
$ascLen=strlen($str); if($ascLen<=$len) return $str;
$hasCC=ereg(”[xA1-xFE]“,$str); #同上
$hasAsc=ereg(”[x01-xA0]“,$str);
if(!$hasCC) return substr($str,0,$len);
if(!$hasAsc)
if($len & 0×01) #如果长度是奇数
return substr($str,0,$len+$len-2);
else
return substr($str,0,$len+$len);
$cind=0;$flag=0;$reallen=0;//实际取字节长
while($cind<$ascLen && $reallen<$len)
{ //by www.
if(ord(substr($str,$cind,1))<0xA1){ //如果该字节为英文 则加一
$cind++;
}else{//否则 加2个字节
$cind+=2;
}
$reallen++;
}
return substr($str,0,$cind);
}
?>

例3,把给定文字,按切割数量存入数组(适合短篇文字,长文章可没分隔一部分就直接处理一次)

<?php
function SplitContent($content,$smslen){
$str_tmp=$content;
$arr_cont=array();
$len_tmp=0;
$i=0;//分割绝对位置
while (strlen($str_tmp)>0){
$str_tmp=ccStrLeft($str_tmp,$smslen);
array_push($arr_cont,$str_tmp);
$i+=strlen($str_tmp);
$str_tmp=substr($content,$i,strlen($content));
}
return $arr_cont;
} //by www.
?>

测试:

<?php
$str=’a计算中英文混合1234字符串的长度abcd’;
echo $str.’的长度为:’.ccStrLen($str);
echo ‘<br>’;
$smslen=3;//截取长度
print_r(SplitContent($str,$smslen));
?>

分割结果:
Array
(
[0] => a计算
[1] => 中英文
[2] => 混合1
[3] => 234
[4] => 字符串
[5] => 的长度
[6] => abc
[7] => d
)


    
[2]解析php中$_REQUEST的用法
    来源: 互联网  发布时间: 2013-12-24

有关php中$_REQUEST的用法,很多资料上都有介绍。
在php手册中,这个变量解释为:"默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。"

注意其中包含cookie的内容,做个测试:

<?php
$_COOKIE['name'] = "aaa";
print_r($_REQUEST);
?>

输出结果:
Array ( )

并没有取到cookie的内容呀,为什么呢?

再看手册,下面有一行:
5.3.0 引入 request_order。该指令会影响 $_REQUEST 的内容

我的php版本是5.3.17,打开php.ini,找到request_order:

    ; This directive determines which super global data (G,P,C,E & S) should
    ; be registered into the super global array REQUEST. If so, it also determines
    ; the order in which that data is registered. The values for this directive are
    ; specified in the same manner as the variables_order directive, EXCEPT one.
    ; Leaving this value empty will cause PHP to use the value set in the
    ; variables_order directive. It does not mean it will leave the super globals
    ; array REQUEST empty.
    ; Default Value: None
    ; Development Value: "GP"
    ; Production Value: "GP"
    ; http://php.net/request-order
    request_order = "GP"

翻译:
这条指令确定了哪些超全局数据该被注册到超全局数组REQUEST中,这些超全局数据包括G(GET),P(POST),C(COOKIE),E(ENV),S(SERVER)。这条指令同样指定了这些数据的注册顺序,换句话说GP和PG是不一样的。注册的顺序是从左至右,即右侧的值会覆盖左侧的。比如,当设置为GPC时,COOKIE > POST > GET,依次覆盖。如果这个项被设置为空,php将会使用指令variables_order的值来指定。

如果将php.ini中的request_order设置为"GPC"后,运行下面的程序post.php,看看结果如何:

<?php
    error_reporting(0);
    setcookie("value", "cookie", time()+3600);
    echo "===GET===<br />";
    echo $_GET['value'] . "<br />";
    echo "===POST===<br />";
    echo $_POST['value'] . "<br />";
    echo "===COOKIE===<br />";
    echo $_COOKIE['value'] . "<br />";
    echo "===REQUEST===<br />";
    echo $_REQUEST['value'] . "<br />";
?>
<form method="post" action="/blog_article/value/get.html">
   <input type="text" name="value" value="post"/>
   <input type="submit" value="submit"/>
</form>

输出结果:

    ===GET===
    get
    ===POST===
    post
    ===COOKIE===
    cookie
    ===REQUEST===
    cookie

可以看到cookie的值被取到了。
为了使程序兼容更多的版本,不要在程序中使用$_REQUEST这个超全局变量。
当程序确实需要接收get和post过来的参数时,可以用下面的方法代替:
$_REQ = array_merge($_GET, $_POST);

完整代码:

<?php
    error_reporting(0);
    setcookie("value", "cookie", time()+3600);

    $_REQ = array_merge($_GET, $_POST);

    echo "===GET===<br />";
    echo $_GET['value'] . "<br />";
    echo "===POST===<br />";
    echo $_POST['value'] . "<br />";
    echo "===COOKIE===<br />";
    echo $_COOKIE['value'] . "<br />";
    echo "===REQUEST===<br />";
    echo $_REQ['value'] . "<br />";
?>
<form method="post" action="/blog_article/value/get.html">
  <input type="text" name="value" value="post"/>
  <input type="submit" value="submit"/>
</form>

输出结果:
  

  ===GET===
    get
    ===POST===
    post
    ===COOKIE===
    cookie
    ===REQUEST===
    post

另外,判断是post还是get请求的页面,最好使用:

代码示例:
$_SERVER['REQUEST_METHOD']

方法。


    
[3]php数组全排列的非递归算法的实例代码
    来源: 互联网  发布时间: 2013-12-24

有关php数组全排列的递归算法的代码,参见文章:php全排列的递归算法的代码 。

以下是php数组全排例的非递归算法实现代码:

<?php
    /**
    * 取得数组的全排列
    *
    * @param array $source 待排列数组,一维
    * @return array
    * @site www.
    */
    function getAllPerm($source)
    {
        $rs = array();
        sort($source);
        $last = count($source) - 1;
        $z = 0;
        $x = $last;
        $rs[] = $source;

        while($x > 0)
        {
            // 相邻的两个元素,先将x的值赋给y,x再自减1
            $y = $x--;

            // 如果前一个元素的值小于后一个元素的值
            if($source[$x] < $source[$y])
            {
                // 从尾部开始,找到第一个大于 $x 元素的值
                $z = $last;
                while($source[$x] > $source[$z])
                {
                    $z--;
                }

                // 交换 $x 和 $z 元素的值
                list($source[$x], $source[$z]) = array($source[$z], $source[$x]);

                // 将 $y 之后的元素全部逆向排列
                for($i = $last; $i > $y; $i--, $y++)
                {
                    list($source[$i], $source[$y]) = array($source[$y], $source[$i]);
                }
                $rs[] = $source;
                $x = $last;
            }
        }
        return $rs;
    }

    $source = array(1,2,3);
    $rs = getAllPerm($source);
    print_r($rs);
?>

输出结果:
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
            )

        [1] => Array
            (
                [0] => 1
                [1] => 3
                [2] => 2
            )

        [2] => Array
            (
                [0] => 2
                [1] => 1
                [2] => 3
            )

        [3] => Array
            (
                [0] => 2
                [1] => 3
                [2] => 1
            )

        [4] => Array
            (
                [0] => 3
                [1] => 1
                [2] => 2
            )

        [5] => Array
            (
                [0] => 3
                [1] => 2
                [2] => 1
            )

    )


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3