1
0
mirror of https://github.com/php/doc-zh.git synced 2026-03-24 23:22:14 +01:00
Files
archived-doc-zh/reference/strings/functions/str-replace.xml
mowangjuanzi 7f4398773e Update strings
2025-07-09 00:53:21 +08:00

202 lines
6.7 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 45042fef652f1b4e904e809fcbfcf31f6c60670b Maintainer: daijie Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<refentry xml:id="function.str-replace" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>str_replace</refname>
<refpurpose>子字符串替换</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>array</type></type><methodname>str_replace</methodname>
<methodparam><type class="union"><type>array</type><type>string</type></type><parameter>search</parameter></methodparam>
<methodparam><type class="union"><type>array</type><type>string</type></type><parameter>replace</parameter></methodparam>
<methodparam><type class="union"><type>string</type><type>array</type></type><parameter>subject</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">count</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
该函数返回字符串或者数组。该字符串或数组是将 <parameter>subject</parameter> 中全部的 <parameter>search</parameter> 都被 <parameter>replace</parameter> 替换之后的结果。
</para>
<para>
要根据模式而不是固定字符串替换文本,使用 <function>preg_replace</function>
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
如果 <parameter>search</parameter><parameter>replace</parameter> 为数组,那么 <function>str_replace</function> 将对 <parameter>subject</parameter> 做二者的映射替换。如果 <parameter>replace</parameter> 的值的个数少于 <parameter>search</parameter> 的个数,多余的替换将使用空字符串来进行。如果 <parameter>search</parameter> 是一个数组而 <parameter>replace</parameter> 是一个字符串,那么 <parameter>search</parameter> 中每个元素的替换将始终使用这个字符串。该转换不会改变大小写。
</para>
<para>
如果 <parameter>search</parameter><parameter>replace</parameter> 都是数组,它们的值将会被依次处理。
</para>
<para>
<variablelist>
<varlistentry>
<term><parameter>search</parameter></term>
<listitem>
<para>
查找的目标值,也就是 <emphasis>needle</emphasis>。一个数组可以指定多个目标。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>replace</parameter></term>
<listitem>
<para>
<parameter>search</parameter> 的替换值。一个数组可以被用来指定多重替换。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>subject</parameter></term>
<listitem>
<para>
执行替换的数组或者字符串。也就是 <emphasis>haystack</emphasis>
</para>
<para>
如果 <parameter>subject</parameter> 是一个数组,替换操作将遍历整个 <parameter>subject</parameter>,返回值也将是一个数组。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>count</parameter></term>
<listitem>
<para>
如果被指定,它的值将被设置为替换发生的次数。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
该函数返回替换后的数组或者字符串。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>str_replace</function> 基本示例</title>
<programlisting role="php">
<![CDATA[
<?php
// 赋值: <body text='black'>
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
echo $bodytag, PHP_EOL;
// 赋值: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
echo $onlyconsonants, PHP_EOL;
// 赋值: 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);
echo $newphrase, PHP_EOL;
// 赋值: 2
$str = str_replace("ll", "", "good golly miss molly!", $count);
echo $count, PHP_EOL;
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>可能的 <function>str_replace</function> 替换示例</title>
<programlisting role="php">
<![CDATA[
<?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);
echo $newstr, PHP_EOL;
// 输出 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), PHP_EOL;
// 输出: apearpearle pear
// 由于上面提到的原因
$letters = array('a', 'p');
$fruit = array('apple', 'pear');
$text = 'a p';
$output = str_replace($letters, $fruit, $text);
echo $output, PHP_EOL;
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&note.bin-safe;
<caution>
<title>了解替换顺序</title>
<para>
由于 <function>str_replace</function> 的替换时从左到右依次进行的,进行多重替换的时候可能会替换掉之前插入的值。参见该文档的示例。
</para>
</caution>
<note>
<para>
该函数区分大小写。使用 <function>str_ireplace</function> 可以进行不区分大小写的替换。
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>str_ireplace</function></member>
<member><function>substr_replace</function></member>
<member><function>preg_replace</function></member>
<member><function>strtr</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->