PHP和多字节字符的帮助
我有一个我认为很简单的问题,但结果却很复杂 我有一个很长的UTF-8字符串,它混合了罗马、西欧、日本和韩国字符和标点符号。许多是多字节字符,但有些(我认为)不是 我需要做两件事:PHP和多字节字符的帮助,php,multibyte,Php,Multibyte,我有一个我认为很简单的问题,但结果却很复杂 我有一个很长的UTF-8字符串,它混合了罗马、西欧、日本和韩国字符和标点符号。许多是多字节字符,但有些(我认为)不是 我需要做两件事: 确保没有重复字符(并输出新字符串,去掉重复字符) 随机洗牌新字符串 (对不起,我似乎无法将代码引用的格式设置正确…) 使用这两个函数(有人非常有用地提供了这两个函数),我认为我已经准备好了……奇怪的是,似乎唯一字符串(没有重复)和无序字符串不包含相同数量的字符。(我从浏览器中突出显示这些字符,然后剪切并粘贴到另一个应用
有人有什么建议吗?很抱歉,我对这个很陌生,所以我可能只是在做一些非常愚蠢的事情。你可能可以做得简单得多 下面是一个只获取字符串中唯一字符的函数:
// returns an array of unique characters from a given string
function getUnique( $string ) {
$chars = preg_split( '//', $string, -1, PREG_SPLIT_NO_EMPTY );
$unique = array_unique( $chars );
return $unique;
}
然后,如果要重新排列顺序,只需将唯一字符数组传递给shuffle
:
$shuffled = shuffle( $unique );
编辑:对于多字节字符,此函数应该可以完成以下操作(感谢您对正则表达式的帮助):
函数getUnique($string){
$chars=预分割('/(?格式化代码很简单:在每行前面使用4个空格,它就会被识别为代码。请重新格式化您的代码。@apesa:谢谢!我不知怎的认为我必须在第一行中只放4个空格。Craig,非常感谢您提供了这一点……我决定尝试一种稍微不同的方式:使用Unicode。这可以编辑为去掉吗独特的uABCD;格式的图案?无论哪种方式,谢谢你的建议!!我也会试试,祈祷好运!@Dave-没问题,希望有帮助。我用一个包含汉字的字符串测试了它,它似乎工作得很好。(请记住,如果在浏览器中查看,请确保已为输出设置了UTF-8头,否则会出现错误).我不建议尝试使用和#uABCD;
格式的字符,因为这样只会使它变得更复杂,但我相信您也可以使用正则表达式。如果一切顺利,请告诉我。
// returns an array of unique characters from a given string
function getUnique( $string ) {
$chars = preg_split( '//', $string, -1, PREG_SPLIT_NO_EMPTY );
$unique = array_unique( $chars );
return $unique;
}
$shuffled = shuffle( $unique );
function getUnique( $string ) {
$chars = preg_split( '/(?<!^)(?!$)/u', $string );
$unique = array_unique( $chars );
return $unique;
}