php字符串操作_字符串截取_字符串转数组_字符串替换_字符串运行时间:2019-08-07    作者:panda    访问:320

字符串截取:substr

(PHP 4, PHP 5, PHP 7)

string substr    ( string $string   , int $start   [, int $length  ] )

返回字符串 stringstartlength 参数指定的子字符串。

参数

  • string
  • 输入字符串。必须至少有一个字符。

  • start
  • 如果 start 是非负数,返回的字符串将从 stringstart 位置开始,从 0 开始计算。例如,在字符串 "abcdef" 中,在位置 0 的字符是 "a",位置 2 的字符串是 "c" 等等。

    如果 start 是负数,返回的字符串将从 string 结尾处向前数第 start 个字符开始。

    如果 string 的长度小于 start,将返回 FALSE

    Example #1 使用负数 start

    <?php
    $rest 
    substr("abcdef", -1);    // 返回 "f"
    $rest substr("abcdef", -2);    // 返回 "ef"
    $rest substr("abcdef", -31); // 返回 "d"
    ?>
  • length
  • 如果提供了正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符(取决于 string 的长度)。

    如果提供了负数的 length,那么 string 末尾处的 length 个字符将会被省略(若 start 是负数则从字符串尾部算起)。如果 start 不在这段文本中,那么将返回 FALSE

    如果提供了值为 0FALSENULLlength,那么将返回一个空字符串。

    如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。

字符串转数组 :explode

(PHP 4, PHP 5, PHP 7)

explode使用一个字符串分割另一个字符串

说明

array explode    ( string $delimiter   , string $string   [, int $limit  ] )

此函数返回由字符串组成的数组,每个元素都是    string    的一个子串,它们被字符串    delimiter    作为边界点分割出来。

参数

  • delimiter
  • 边界上的分隔字符。

  • string
  • 输入的字符串。

  • limit
  • 如果设置了    limit    参数并且是正数,则返回的数组包含最多    limit    个元素,而最后那个元素将包含    string    的剩余部分。

    如果   limit   参数是负数,则返回除了最后的   -limit   个元素外的所有元素。

    如果 limit 是 0,则会被当做 1。

由于历史原因,虽然 implode()   可以接收两种参数顺序,但是   explode() 不行。你必须保证   separator 参数在   string 参数之前才行。

返回值

此函数返回由字符串组成的 array,每个元素都是    string    的一个子串,它们被字符串    delimiter    作为边界点分割出来。

如果 delimiter    为空字符串(""),explode()    将返回 FALSE。   如果    delimiter    所包含的值在    string    中找不到,并且使用了负数的 limit ,   那么会返回空的 array,   否则返回包含 string    单个元素的数组

<?php
/* A string that doesn't contain the delimiter will simply return a one-length array of the original string. */
$input1 "hello";
$input2 "hello,there";
var_dumpexplode','$input1 ) );
var_dumpexplode','$input2 ) );

?>

以上例程会输出:

array(1)
(
    [0] => string(5) "hello"
)
array(2)
(
    [0] => string(5) "hello"
    [1] => string(5) "there"
)

字符串替换str_replace

(PHP 4, PHP 5, PHP 7)

str_replace子字符串替换

说明

mixed str_replace    ( mixed $search   , mixed $replace   , mixed $subject   [, int &$count  ] )

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

如果没有一些特殊的替换需求(比如正则表达式),你应该使用该函数替换 ereg_replace()preg_replace()

参数

如果 searchreplace 为数组,那么 str_replace() 将对 subject 做二者的映射替换。如果 replace 的值的个数少于 search 的个数,多余的替换将使用空字符串来进行。如果 search 是一个数组而 replace 是一个字符串,那么 search 中每个元素的替换将始终使用这个字符串。该转换不会改变大小写。

如果 searchreplace 都是数组,它们的值将会被依次处理。

  • search
  • 查找的目标值,也就是 needle。一个数组可以指定多个目标。

  • replace
  • search 的替换值。一个数组可以被用来指定多重替换。

  • subject
  • 执行替换的数组或者字符串。也就是 haystack

    如果 subject 是一个数组,替换操作将遍历整个 subject,返回值也将是一个数组。

  • count
  • 如果被指定,它的值将被设置为替换发生的次数。

返回值

该函数返回替换后的数组或者字符串。

范例

Example #1 str_replace() 基本范例

<?php
// 赋值: <body text='black'>
$bodytag str_replace("%body%""black""<body text='%body%'>");

// 赋值: Hll Wrld f PHP
$vowels = array("a""e""i""o""u""A""E""I""O""U");
$onlyconsonants str_replace($vowels"""Hello World of PHP");

// 赋值: You should eat pizza, beer, and ice cream every day
$phrase  "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits""vegetables""fiber");
$yummy   = array("pizza""beer""ice cream");

$newphrase str_replace($healthy$yummy$phrase);

// 赋值: 2
$str str_replace("ll""""good golly miss molly!"$count);
echo 
$count;
?>

Example #2 可能的 str_replace() 替换范例

<?php
// 替换顺序
$str     "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order   = array("\r\n""\n""\r");
$replace '<br />';

// 首先替换 \r\n 字符,因此它们不会被两次转换
$newstr str_replace($order$replace$str);

// 输出 F ,因为 A 被 B 替换,B 又被 C 替换,以此类推...
// 由于从左到右依次替换,最终 E 被 F 替换
$search  = array('A''B''C''D''E');
$replace = array('B''C''D''E''F');
$subject 'A';
echo 
str_replace($search$replace$subject);

// 输出: apearpearle pear
// 由于上面提到的原因
$letters = array('a''p');
$fruit   = array('apple''pear');
$text    'a p';
$output  str_replace($letters$fruit$text);
echo 
$output;
?>

注释

Note: 此函数可安全用于二进制对象。

Caution    

了解替换顺序

由于 str_replace() 的替换时从左到右依次进行的,进行多重替换的时候可能会替换掉之前插入的值


字符串运行eval

(PHP 4, PHP 5, PHP 7)

eval把字符串作为PHP代码执行

说明

mixed eval    ( string $code   )

把字符串 code 作为PHP代码执行。

Caution  

函数eval()语言结构是 非常危险的,    因为它允许执行任意 PHP 代码。 它这样用是很危险的。    如果您仔细的确认过,除了使用此结构以外    别无方法, 请多加注意,不要允许传入任何由用户    提供的、未经完整验证过的数据

参数

  • code
  • 需要被执行的字符串

    代码不能包含打开/关闭         PHP tags。比如,        'echo "Hi!";' 不能这样传入:        '<?php echo "Hi!"; ?>'。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如        'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'

    除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如         'echo "Hi!"' 会导致一个 parse error,而        'echo "Hi!";' 则会正常运行。

    return 语句会立即中止当前字符串的执行。

    代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。

返回值

eval() 返回 NULL,除非在执行的代码中 return 了一个值,函数返回传递给 return 的值。 PHP 7 开始,执行的代码里如果有一个 parse error,eval() 会抛出 ParseError 异常。在 PHP 7 之前,   如果在执行的代码中有 parse error,eval() 返回    FALSE,之后的代码将正常执行。无法使用 set_error_handler() 捕获 eval() 中的解析错误。

范例

Example #1 eval() 例子 - 简单的文本合并

<?php
$string 
'cup';
$name 'coffee';
$str 'This is a $string with my $name in it.';
echo 
$str"\n";
eval(
"\$str = \"$str\";");
echo 
$str"\n";
?>

以上例程会输出:

This is a $string with my $name in it.
This is a cup with my coffee in it.