php數組是一個比較特殊的字符類型了,我們一起來看看關于一個PHP字符串與字節數組的例子,有需要了解的朋友不防一起來看看吧.
一、正則法,當文本相當長時,速度會很快
- function stringToByteArray($str,$charset,$to_charset) {
- $str = iconv($charset,$to_charset,$str);
- preg_match_all(‘/(.)/s’,$str,$bytes);
- $bytes=array_map(‘ord’,$bytes[1]) ;
- return $bytes;
- }
- function byteArrayToString($bytes,$charset,$to_charset) {
- $bytes=array_map(‘chr’,$bytes);
- $str=implode(”,$bytes);
- $str = iconv($to_charset,$charset,$str);
- return $str;
- }
- $byteArray=stringToByteArray(‘http測試’,’utf-8′,’gbk’);
- print_r($byteArray);
- $retStr=byteArrayToString($byteArray,’utf-8′,’gbk’);
- echo $retStr;
二、循環法
- /**
- * 轉換一個String字符串為byte數組
- * @param $str 需要轉換的字符串
- * @param $bytes 目標byte數組
- * @author Zikie
- */
- function getBytes($string) {
- $bytes = array();
- for($i = 0; $i < strlen($string); $i++){
- $bytes[] = ord($string[$i]);
- }
- return $bytes;
- }
- /**
- * 將字節數組轉化為String類型的數據
- * @param $bytes 字節數組
- * @param $str 目標字符串
- * @return 一個String類型的數據
- */
- function toStr($bytes) {
- $str = '';
- foreach($bytes as $ch) {
- $str .= chr($ch);
- }
- return $str;
- }
- $byteArray=getBytes(iconv('utf-8','gbk','http測試'));
- print_r($byteArray); //開源軟件:Vevb.com
- $retStr=toStr($byteArray);
- echo $retStr;
兩種方法都是一樣的
結果為:Array
- (
- [0] => 104
- [1] => 116
- [2] => 116
- [3] => 112
- [4] => 178
- [5] => 226
- [6] => 202
- [7] => 212
- )
結果為:http測試
補充一個通用函數
要加密,則需要將字符串轉為ASCII的字節數組,反之,則要轉回來,代碼為什么速度快?那就是,能不用FOR循環的,直接不用,使用PHP原有的函數,讓它實現,這是最快的.
- <?php
- function stringToByteArray($str,$charset) {
- $str = iconv($charset,'UTF-16',$str);
- preg_match_all('/(.)/s',$str,$bytes); //注:本文的盜版已經有了。不過,提示一下讀者,這里的正則改了。
- $bytes=array_map('ord',$bytes[1]) ;
- return $bytes;
- }
- function byteArrayToString($bytes,$charset) {
- $bytes=array_map('chr',$bytes);
- $str=implode('',$bytes);
- $str = iconv('UTF-16',$charset,$str);
- return $str;
- }
- $byteArray=stringToByteArray('13億人口大國,自認為精通PHP的還是相當多的!','utf-8');
- print_r($byteArray);
- $retStr=byteArrayToString($byteArray,'utf-8');
- echo $retStr;
- ?>
每個函數只有4行代碼,沒有FOR循環,但當文本相當長時,你就能發現,差別真的很大.
新聞熱點
疑難解答