php 分割字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 分割字符串相关的知识,希望对你有一定的参考价值。

php中用explode函数可以把一个字符串按照一个特定的字符分割开来,
比如

<?php
$str='1 2 3 4';
$res=explode(" ",$str);
for($i=0;$i<4;$i++)
echo "$res[$i]<br>";
?>

这样,原来的1 2 3 4就变成了
1
2
3
4
那我的问题是,如果原来的字符串是"1234",当中没有空格,那如何达到以上的效果?也就是如何把一个字符串中的每一个字符都分割开来。注意是PHP,谢谢!

这100分来得好爽哦,楼上的正解。

关于str_split的详细例子程序:

<?php

$str = "Hello Friend";

$arr1 = str_split($str);
$arr2 = str_split($str, 3);

print_r($arr1);
print_r($arr2);

?> 
上例将输出:

Array
(
    [0] => H
    [1] => e
    [2] => l
    [3] => l
    [4] => o
    [5] =>
    [6] => F
    [7] => r
    [8] => i
    [9] => e
    [10] => n
    [11] => d
)

Array
(
    [0] => Hel
    [1] => lo
    [2] => Fri
    [3] => end
)

但是,str_split不支持汉字,会把汉字分为两半,需要把汉字当为一个字符进行处理的时候,需要自己编写函数。
参考技术A 不懂…… 参考技术B <?php
$str = '1234';
$arr = str_split($str);
print_r($arr);
?>本回答被提问者采纳

php如何分割中文字符串

例:【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里

php使用正则或者其他方式分割成数组这样
暑促特价包邮 SAMSUNG 三星 Galaxy S4 GT-i9500 盖世4 行货 沙发上 家里

因为是中文字符,还有特殊字符,所以本人不懂如何解决,求教~

  php分割中文字符串,如果直接用PHP函数“str_split”来分割,会出现乱码,因为中文字符长度和英文字符长度是不一样的。

  所以,可以建立新的函数先把字符转成ASCII值,接着通过判断不同字符的长度来正确分割中文字符串,把结果存入数组,最后再用PHP函数“join”在字符间插入百分号。

  具体参考代码如下:

<?php
function str_split_utf8($str)
 $split=1;
 $array=array();
 for($i=0;$i<strlen($str))
  $value=ord($str[$i]);
  if($value>127)
   if($value>=192&&$value<=223) $split=2;
   elseif($value>=224 && $value<=239) $split=3;
   elseif($value>=240 && $value<=247) $split=4;
  else
   $split=1;
  
  $key=NULL;
  for($j=0;$j<$split;$j++,$i++)
   $key.=$str[$i];
  
  array_push($array,$key);
 
 return $array;

$string="百度知道www.baidu.cn";
$arr1=str_split_utf8($string);
echo join("%",$arr1);
?>
参考技术A 在你的方法上改了一下就是把他封装成了一个函数方便使用代码如下:

function strReplace($a,$b,$c)
$arr = str_replace($a,$b,$c);
$arr = trim($arr);
$arr = explode($b, $arr);
foreach ($arr as $key => $value)
echo "$value";


strReplace(array('【', '】', '(',')','/',' ', '(', ')','+')," ","【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里");
已经告诉你啦,好用请给满分追问

额。。。有没有更好的解决方案,你的这个等于没说,我自己都搞定了。
我希望功能的实现,最好使用正则,或者更通用的手段,这里的特殊字符,包括'【', '】', '(','),但不限于这些,当字符串更复杂时,特殊字符更多时,又能够如何解决。谢谢!

参考技术B <?php
function mbStrSplit ($string, $len=1)
$start = 0;
$strlen = mb_strlen($string);
while ($strlen)
$array[] = mb_substr($string,$start,$len,"utf8");
$string = mb_substr($string, $len, $strlen,"utf8");
$strlen = mb_strlen($string);

return $array;


header('Content-type:text/html;charset=utf-8');
$str = '【暑促特价包邮】SAMSUNG/三星 Galaxy S4 GT-i9500 盖世4 行货 (沙发上)+++家里';
$r = mbStrSplit($str, 4);
echo '<pre>';
print_r($r);
echo '</pre>';
?>追问

结果不对,我用
$str = '【暑促特价包邮】4 行货 (家里';

$a = array('【', '】', '(',')','/',' ', '(', ')');
$arr = str_replace($a, ' ', $str);
$arr = trim($arr);
$arr = explode(' ', $arr);
print_r($arr);
但是感觉不是很好,所以希望能够有更好的解决方案。

本回答被提问者采纳

以上是关于php 分割字符串的主要内容,如果未能解决你的问题,请参考以下文章

PHP算法之分割平衡字符串

php 分割字符串

PHP字符串数组函数

php 将一个字符串分割为组成它的字符

PHP:用逗号分割字符串,但不是在大括号或引号之间?

php和mysql两种不同方式的分割字符串和类型转换