字符串轉數組,字符串亂序

字符串轉數組,字符串亂序

<?php  
/** 
 * 字符串轉數組,字符串亂序 
 * 個人練習題 
 * 文件編碼和函數中的$charset必須一致,否則可能亂碼 
 * 20110609 https://yourshell.info/ 
 * 
 * $array = str2array($str, 'utf-8', 1); 
 * $new_array = arrayshuffle($array); 
 * print_r(join($new_array)); 
 */  
  
  
  
set_time_limit(0);  
// $str='我愛你url網址,你呢';  
$str = 'url網址 < a href = "127.0.0.1/pe" title="摘要"/ >地方la</a >gfb6是否<body></html>';  
// $str = file_get_contents('https://127.0.0.1/pe');  
  
$array = str2array($str, 'utf-8', 1);  
print_r(join($array));  
  
$new_array = arrayshuffle($array);  
echo "\r\n<br>";  
print_r(join($new_array)) . "\r\n<br />";  
  
function arrayshuffle($array){   # 必須和 str2array() 中的編碼($charset)一致,否則shuffle() 將導致亂碼  
      
    $key = array_keys($array);  
    $key2 = shuffle($key);  
    $n = count($array);  
    $new_key = '';  
    $new_str = '';  
    $new_array = array();  
  
    for($i = 0; $i < $n; $i++){  
        $new_key .= $key[$i] . ',';  
        $new_str = $array[$key[$i]];  
        $new_array[$key[$i]] = $array[$key[$i]];  
        }  
    return $new_array;  
    }  
  
function str2array($str, $charset, $len = 1){   # 字符串轉數組  
  
    $str = str_replace('< ', '<', $str);  
    $str = str_replace(' >', '>', $str);      
    $n = mb_strlen($str, $charset);  
    for($i = 0;$i < $n;$i += $len)  
    {  
        if(mb_substr($str, $i, $len, $charset) == '<')  
            {  
            $part1 = mb_substr($str, $i, $n, $charset);                            # 截取剩餘的部分  
            preg_match("/(\<.*?\>)(.*?)(\>)/i", $part1, $matches);                 # 檢測$part1中HTML非單一標簽  
            if(isset($matches[0]) && strstr($matches[0], '<style') || isset($matches[0]) && strstr($matches[0], '<script')){  
                                                                                   # 分析CSS和JS  
                $strarr[] = $matches[0];  
                $taglen = mb_strlen($matches[0], $charset);                        # $taglen是閉合標簽的長度  
                }elseif(isset($matches[1])){                                       # 其它的非單一標簽  
                  
                $strarr[] = $matches[1];  
                $taglen = mb_strlen($matches[1], $charset);  
                }else{  
                preg_match("/(\<.*?\>)(.*?)/i", $part1, $matches);                 # 檢測$part1中HTML單一標簽  
                $strarr[] = $matches[1];  
                $taglen = mb_strlen($matches[1], $charset);  
                }  
            $i += $taglen;                                                         # $i的值  
            $i -= 1;  
            continue;                                                              # 跳出本次循環,進行下一次循環  
            }  
        $strarr[] = mb_substr($str, $i, $len, $charset);  
        }  
    return $strarr;  
    }  
?>

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *