欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

字符串转数组,字符串乱序

程序员文章站 2022-05-11 13:57:20
字符串转数组,字符串乱序

字符串转数组,字符串乱序

<?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;  
    }  
?>