PHP经验总结 - 开发技巧分享

503 查看

简述

接触PHP差不多2年,从懵懂到入门,再到追求稳定高效的高阶级学习,我慢慢的积累一些PHP编程经验,我本人记性不好,所以把这些经验记下来,慢慢累积,乐自助人,何乐不为呢?下面是我面对一些问题所采取处理解决方案,希望对大家有所帮助,同时也欢迎大家指正。

问题&解决方案

1、PHP对特殊字符串的处理方案

  • 普通的字符串截取,一般采用substr()或者mb_substr(),需要说明的是substr()和mb_substr()仅限于英文阿拉伯数字的处理,对中文的截取处理是很不友好的,不仅涉及到字符编码gbk和utf-8的区分,还有一些乱码情况,因此对于字符串的截取,特别是包含中文的字符串,首推正则匹配处理,下面附上解决方案的案例:


    <?php
    /**
     * 
     * @version 1.0
     * @desc   处理一些特殊字符串的一些方法,比较多的是采用正则匹配的方法
     * @author Rongx
     * @since  2015.11.26
     *
     */
    
    // * 匹配xxx-xxx和xxx的情况
    $url1 = '/college/pku/';
    $url2 = '/college/pku-aaa/';
    preg_match_all ( '|/college/(\w+(\-\w+)?)|i', $url2, $urlArray );
    echo "<pre>";
    print_r($urlArray);
    
    // * 匹配获取中文()里面的内容
    header("Content-type: text/html; charset=utf-8"); 
    $title = "不知道什么鬼的学校(北京大学,南京大学)";
    preg_match_all( '/((.+?))/', $title, $resultArr);
    echo '目标字段:' . $title . '<br>';
    echo "<pre>";
    print_r($resultArr);
    
    // * 匹配字符串内的指定中文字符
    header("Content-type: text/html; charset=utf-8"); 
    $chstr = "交通运输大类";
    $match = "/类|类大/";
    $chstr = preg_replace($match,"",$chstr);
    echo $chstr;
    ?>
    
  • 当然了,字符串处理还有其他办法,不过我一般是用上述两种,要不正则匹配,要不字符串截取,如果你有更好更优的解决方案,欢迎分享你的解决方案。

2、读写文本数据的处理解决方案

  • 数据写入文本,一般有两种情况,要不就是字符串写入文本,要不就是数组(一维或者多维)写入文本。

  • 写入文本的方法有fwrite()和file_put_contents(),我一般选择后者。

  • 保证数据写入文本时是一个字符串,所以处理一维或者多维数组时,建议使用json格式封装数组数据,读取的时候解析json即可。


    <?php
    // * 写入文本
    $data_json = json_encode ( $data );// 写入文本时file_put_contents方法只能将一个字符串写入文件,如选择json格式
    FileClass::checkDir ( AUTO_SYNC_PATH . 'rongxDemo/' ); // 检查目录是否存在                                                                       
    $fileName = AUTO_SYNC_PATH . 'rongxDemo/' . "data.txt"; // 组装文件绝对路径,数据写入文本时文本的路径必须是绝对路径,不能是相对路径                                                                               $file = file_put_contents ( $fileName, $data_json ); // 写入数据
    ?>
    
  • 这是一个简单的数据写入文本的案例,我有一个数组数据,我需要写入一个文本保存在服务器上,那么我首先要确定我要把文件存在哪里?确定好文本存储路径后,对数据进行转义处理,一般我会进行json转义处理,变成字符串后调用file_put_contents()方法进行数据写入文本操作,最终数据以json字符串的方式存储到服务器我指定的路径下。

  • 这里简单介绍一下file_put_contents()方法,中文解释就是将一个字符串写入文件,它有4个参数:file_put_contents();这里他们分别表示:要被写入数据的文件名,要写入的数据,一般来讲后面2个参数是不会用到的,所以我们确定好文件名和数据就可以 这个方法了,下面附上一个PHP官网的案例:


    <?php
    $file = 'people.txt';
    // Open the file to get existing content
    $current = file_get_contents($file);
    // Append a new person to the file
    $current .= "John Smith\n";
    // Write the contents back to the file
    file_put_contents($file, $current);
    ?>
  • 读取文本的方法有fopen()和file_get_contents(),我一般选择后者。

  • 读文本数据时必须保证路径是绝对路径。

  • 有需要可能会用到

<?php

    // * 读取文本
    
    FileClass::checkDir ( AUTO_SYNC_PATH . 'rongxDemo/' ); // 检查目录是否存在
    $fileName = AUTO_SYNC_PATH . 'rongxDemo/' . "data.txt"; // 组装文件绝对路径,数据读取文本时文本的路径也是要求是绝对路径
    // 判断文件是否存在
    if (file_exists ( $fileName )) {
        $file_data = file_get_contents ( $fileName ); // 读取文本数据
    }
    $data = json_decode ( $file_data ); // 解析json封装过的数据
    ?>
  • 这里是一个简单的文本数据读取的案例,我在确定一个文本路径后,调用file_get_contents()方法进行文本数据读取,从而获得文本数据,期间有必要还需要个json或者其他编码转义处理。

  • 这里简单介绍一下file_get_contents()方法,中文解释就是将整个文件读入一个字符串,它有5个参数:file_get_contents();这里他们分别表示:要读取的文件的名称,另指路径,后面三个参数基本不会用到,甚至第二个参数都很少见,所以重点是确定你要读取文件的路径,是绝对路径。下面附上PHP官网的例子:


    <?php
    // <= PHP 5
    $file = file_get_contents('./people.txt', true);
    // > PHP 5
    $file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
    ?>
  • 总结一下读写文本的处理,一般来讲,渡读和写是相互相成的,你需要确定你的文本存放路径(目录位置),因为无论读还是写,你都是操作那个目录下的文件,对于同一个业务来讲,所以有了路径之后,接下来就是数据处理,一般来讲我建议在数据在写入文本前先进行字符串转换,因为数据写入文本的方法对字符串类型的数据更加友好,能避免出现数据丢失的情况。如果大家有什么更好的处理方案,欢迎分享,同时欢迎指正我的问题。

3、数组顺序处理和头尾的增删操作处理解决方案

  • 数组的处理很常见,下面列举针对不同情况下的一些解决方案:

  • array_reverse(返回一个单元顺序相反的数组):换言之就是把数组顺序进行倒序处理。


    <?php
        // array_reverse()的使用案例
        $input  = array("php", 4.0, array("green", "red"));
        $result = array_reverse($input);
        $result_keyed = array_reverse($input, true);
    ?>
  • rsort(对数组逆向排序):同样是一个数组顺序进行倒序处理的方法。


    <?php
        // rsort()的使用案例
        $fruits = array("lemon", "orange", "banana", "apple");
        rsort($fruits);
        foreach ($fruits as $key => $val) {
            echo "$key = $val\n";
        }
    ?>
  • reset(获取数组第一个“首元素”):简单来讲就是将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。

  • 相同的方法有:current() - 返回数组中的当前单元。

<?php

    // reset()的使用案例
    $array = array('step one', 'step two', 'step three', 'step four');
    
    // by default, the pointer is on the first element
    echo current($array) . "<br />\n"; // "step one"
    
    // skip two steps
    next($array);
    next($array);
    echo current($array) . "<br />\n"; // "step three"
    
    // reset pointer, start again on step one
    reset($array);
    echo current($array) . "<br />\n"; // "step one"

?>
  • end(获取最后一个“尾元素”):简单来讲就是将数组的内部指针移动到最后一个单元并返回其值。


    <?php
    
    // end()的使用实例
    $fruits = array('apple', 'banana', 'cranberry');
    echo end($fruits); // cranberry
    
    ?>
  • array_shift(删除开头的单元元素):简单来讲就是将数组的第一个单元移出并作为结果返回,将数组的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。


    <?php
    
    // array_shift()的使用案例
    $stack = array("orange", "banana", "apple", "raspberry");
    $fruit = array_shift($stack);
    print_r($stack);
    ?>
  • array_pop(删除尾部单元元素):简单来讲就是弹出并返回数组的最后一个单元,并将数组 array 的长度减一。如果数组为空(或者不是数组)将返回空值。


    <?php
    // array_pop()的使用案例
    $stack = array("orange", "banana", "apple", "raspberry");
    $fruit = array_pop($stack);
    print_r($stack);
    ?>
  • 总结一下,处理数组排序和数组收尾元素PHP都提供了不错的方法,我们直接用就可以了,但是根据不同的使用场景有不同的处理方案,大家有什么经历心得可以分享一下,同时欢迎指正我的错误。

分享总结

我比较笨,记不起太多了,今天先写到这里,日后还会更新,分享这些不仅仅是对我自己的一个知识的归纳总结,也是希望能帮到很多入门的小师弟们,希望这篇文章对你们有所帮助。