<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <refentry xml:id="function.array-splice" xmlns="http://docbook.org/ns/docbook"> <refnamediv> <refname>array_splice</refname> <refpurpose>Remove a portion of the array and replace it with something else</refpurpose> </refnamediv> <refsect1 role="description"> &reftitle.description; <methodsynopsis> <type>array</type><methodname>array_splice</methodname> <methodparam><type>array</type><parameter role="reference">input</parameter></methodparam> <methodparam><type>int</type><parameter>offset</parameter></methodparam> <methodparam choice="opt"><type>int</type><parameter>length</parameter><initializer>count($input)</initializer></methodparam> <methodparam choice="opt"><type>mixed</type><parameter>replacement</parameter><initializer>array()</initializer></methodparam> </methodsynopsis> <para> Removes the elements designated by <parameter>offset</parameter> and <parameter>length</parameter> from the <parameter>input</parameter> array, and replaces them with the elements of the <parameter>replacement</parameter> array, if supplied. </para> <note> <para> Numerical keys in <parameter>input</parameter> are not preserved. </para> </note> <note> <simpara> If <parameter>replacement</parameter> is not an array, it will be <link linkend="language.types.array.casting">typecast</link> to one (i.e. <code>(array) $replacement</code>). This may result in unexpected behavior when using an object or &null; <parameter>replacement</parameter>. </simpara> </note> </refsect1> <refsect1 role="parameters"> &reftitle.parameters; <para> <variablelist> <varlistentry> <term><parameter>input</parameter></term> <listitem> <para> The input array. </para> </listitem> </varlistentry> <varlistentry> <term><parameter>offset</parameter></term> <listitem> <para> If <parameter>offset</parameter> is positive then the start of the removed portion is at that offset from the beginning of the <parameter>input</parameter> array. </para> <para> If <parameter>offset</parameter> is negative then the start of the removed portion is at that offset from the end of the <parameter>input</parameter> array. </para> </listitem> </varlistentry> <varlistentry> <term><parameter>length</parameter></term> <listitem> <para> If <parameter>length</parameter> is omitted, removes everything from <parameter>offset</parameter> to the end of the array. </para> <para> If <parameter>length</parameter> is specified and is positive, then that many elements will be removed. </para> <para> If <parameter>length</parameter> is specified and is negative, then the end of the removed portion will be that many elements from the end of the array. </para> <para> If <parameter>length</parameter> is specified and is zero, no elements will be removed. </para> <tip> <para> To remove everything from <parameter>offset</parameter> to the end of the array when <parameter>replacement</parameter> is also specified, use <code>count($input)</code> for <parameter>length</parameter>. </para> </tip> </listitem> </varlistentry> <varlistentry> <term><parameter>replacement</parameter></term> <listitem> <para> If <parameter>replacement</parameter> array is specified, then the removed elements are replaced with elements from this array. </para> <para> If <parameter>offset</parameter> and <parameter>length</parameter> are such that nothing is removed, then the elements from the <parameter>replacement</parameter> array are inserted in the place specified by the <parameter>offset</parameter>. </para> <note> <para> Keys in the <parameter>replacement</parameter> array are not preserved. </para> </note> <para> If <parameter>replacement</parameter> is just one element it is not necessary to put <literal>array()</literal> or square brackets around it, unless the element is an array itself, an object or &null;. </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="returnvalues"> &reftitle.returnvalues; <para> Returns an array consisting of the extracted elements. </para> </refsect1> <refsect1 role="examples"> &reftitle.examples; <para> <example> <title><function>array_splice</function> examples</title> <programlisting role="php"> <![CDATA[ <?php $input = array("red", "green", "blue", "yellow"); array_splice($input, 2); var_dump($input); $input = array("red", "green", "blue", "yellow"); array_splice($input, 1, -1); var_dump($input); $input = array("red", "green", "blue", "yellow"); array_splice($input, 1, count($input), "orange"); var_dump($input); $input = array("red", "green", "blue", "yellow"); array_splice($input, -1, 1, array("black", "maroon")); var_dump($input); ?> ]]> </programlisting> &example.outputs; <screen> <![CDATA[ array(2) { [0]=> string(3) "red" [1]=> string(5) "green" } array(2) { [0]=> string(3) "red" [1]=> string(6) "yellow" } array(2) { [0]=> string(3) "red" [1]=> string(6) "orange" } array(5) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(4) "blue" [3]=> string(5) "black" [4]=> string(6) "maroon" } ]]> </screen> </example> </para> <para> <example> <title>Equivalent statements to various <function>array_splice</function> examples</title> <para> The following statements are equivalent: </para> <programlisting role="php"> <![CDATA[ <?php // append two elements to $input array_push($input, $x, $y); array_splice($input, count($input), 0, array($x, $y)); // remove the last element of $input array_pop($input); array_splice($input, -1); // remove the first element of $input array_shift($input); array_splice($input, 0, 1); // insert an element at the start of $input array_unshift($input, $x, $y); array_splice($input, 0, 0, array($x, $y)); // replace the value in $input at index $x $input[$x] = $y; // for arrays where key equals offset array_splice($input, $x, 1, $y); ?> ]]> </programlisting> </example> </para> </refsect1> <refsect1 role="seealso"> &reftitle.seealso; <para> <simplelist> <member><function>array_merge</function></member> <member><function>array_slice</function></member> <member><function>unset</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 -->