1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.strtok" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>strtok</refname>
<refpurpose>Tokenize string</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>false</type></type><methodname>strtok</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
<methodparam><type>string</type><parameter>token</parameter></methodparam>
</methodsynopsis>
<simpara>Alternative signature (not supported with named arguments):</simpara>
<methodsynopsis>
<type class="union"><type>string</type><type>false</type></type><methodname>strtok</methodname>
<methodparam><type>string</type><parameter>token</parameter></methodparam>
</methodsynopsis>
<para>
<function>strtok</function> splits a string (<parameter>string</parameter>)
into smaller strings (tokens), with each token being delimited by any
character from <parameter>token</parameter>.
That is, if you have a string like "This is an example string" you
could tokenize this string into its individual words by using the
space character as the <parameter>token</parameter>.
</para>
<para>
Note that only the first call to strtok uses the <parameter>string</parameter> argument.
Every subsequent call to strtok only needs the <parameter>token</parameter> to use, as
it keeps track of where it is in the current string. To start
over, or to tokenize a new string you simply call strtok with the
<parameter>string</parameter> argument again to initialize it. Note that you may put
multiple tokens in the <parameter>token</parameter> parameter. The string will be
tokenized when any one of the characters in the <parameter>token</parameter> argument is
found.
</para>
<note>
<para>
This function behaves slightly different from what one may expect being
familiar with <function>explode</function>.
First, a sequence of two or more contiguous <parameter>token</parameter>
characters in the parsed string is considered to be a single delimiter.
Also, a <parameter>token</parameter> situated at the start or end of the
string is ignored.
For example, if a string <literal>";aaa;;bbb;"</literal> is used, successive
calls to <function>strtok</function> with <literal>";"</literal> as a
<parameter>token</parameter> would return strings
"aaa" and "bbb", and then &false;.
As a result, the string will be split into only two elements, while
<literal>explode(";", $string)</literal> would return an array of 5 elements.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>string</parameter></term>
<listitem>
<para>
The <type>string</type> being split up into smaller strings (tokens).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>token</parameter></term>
<listitem>
<para>
The delimiter used when splitting up <parameter>string</parameter>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
A <type>string</type> token, or &false; if no more tokens are available.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.3.0</entry>
<entry>
Now emits <constant>E_WARNING</constant> when <parameter>token</parameter> is not provided.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>strtok</function> example</title>
<programlisting role="php">
<![CDATA[
<?php
$string = "This is\tan example\nstring";
/* Use tab and newline as tokenizing characters as well */
$tok = strtok($string, " \n\t");
while ($tok !== false) {
echo "Word=$tok<br />";
$tok = strtok(" \n\t");
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title><function>strtok</function> behavior on empty part found</title>
<programlisting role="php">
<![CDATA[
<?php
$first_token = strtok('/something', '/');
$second_token = strtok('/');
var_dump($first_token, $second_token);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
string(9) "something"
bool(false)
]]>
</screen>
</example>
</para>
<para>
<example>
<title>The difference between <function>strtok</function> and <function>explode</function></title>
<programlisting role="php">
<![CDATA[
<?php
$string = ";aaa;;bbb;";
$parts = [];
$tok = strtok($string, ";");
while ($tok !== false) {
$parts[] = $tok;
$tok = strtok(";");
}
echo json_encode($parts),"\n";
$parts = explode(";", $string);
echo json_encode($parts),"\n";
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
["aaa","bbb"]
["","aaa","","bbb",""]
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&return.falseproblem;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>explode</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
-->
|