search for in the  
<array_uniquearray_values>
Last updated: Thu, 19 May 2005

array_unshift

(PHP 4, PHP 5)

array_unshift --  Prepend one or more elements to the beginning of an array

Description

int array_unshift ( array &array, mixed var [, mixed ...] )

array_unshift() prepends passed elements to the front of the array. Note that the list of elements is prepended as a whole, so that the prepended elements stay in the same order. All numerical array keys will be modified to start counting from zero while literal keys won't be touched.

Returns the new number of elements in the array.

Example 1. array_unshift() example

<?php
$queue
= array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
?>

This would result in $queue having the following elements:

Array
(
   [0] => apple
   [1] => raspberry
   [2] => orange
   [3] => banana
)

See also array_shift(), array_push(), and array_pop().



User Contributed Notes
array_unshift
php at electricsurfer dot com
26-Feb-2004 08:20
even simpler unshifting of a reference !
<?php
/**
 * @return int
 * @param $array array
 * @param $value mixed
 * @desc Prepend a reference to an element to the beginning of an array. Renumbers numeric keys, so $value is always inserted to $array[0]
 */
function array_unshift_ref(&$array, &$value)
{
  
$return = array_unshift($array,'');
  
$array[0] =& $value;
   return
$return;
}
?>
lagroue
09-Nov-2003 06:46
Last version of PHP deprecated unshifting of a reference.
You can use this function instead :

<?php
function array_unshift1 (& $ioArray, $iValueWrappedInAnArray) {
  
$lNewArray = false;
   foreach (
array_keys ($ioArray) as $lKey)
      
$lNewArray[$lKey+1] = & $ioArray[$lKey];
  
$ioArray = array (& $iValueWrappedInAnArray[0]);
   if (
$lNewArray)
       foreach (
array_keys ($lNewArray) as $lKey)
            
$ioArray[] = & $lNewArray[$lKey];
   return
count($ioArray);
}

// before last PHP (now generates a deprecation warning)
array_unshift ($a, &$v);
// since last PHP (caution, there is a wrapping array !!)
array_unshift1 ($a, array (&$v));
?>
chris dot NoThxSpam dot given at hp dot com
23-Jul-2003 02:17
If you need to change the name of a key without changing its position in the array this function may be useful.

<?php
function array_key_change($Old, $New, $In, $NewVal=NULL) {
      
$Temp = array();
       while(isset(
$Temp[$Old]) == false) {
               list(
$k, $v) = each($In);
              
$Temp[$k] = $v;
               unset(
$In[$k]);
       }
       if(
$NewVal == NULL) {
              
$NewVal = $Temp[$Old];
       }
       unset(
$Temp[$Old]);
      
$Temp = array_reverse($Temp);
      
$In = array_merge(array($New=>$NewVal), $In);
       while(list(
$k,$v) = each($Temp)) {
              
$In = array_merge(array($k=>$v), $In);
       }
       return(
$In);
}
?>
rsmith_NOSPAM_ at _NOSPAM_unitec dot ac dot nz
30-Jul-2002 09:00
array_merge() will also reindex (see array_merge() manual entry), but the '+' operator won't, so...

<?php
$arrayone
=array("newkey"=>"newvalue") + $arrayone;
?>

does the job.
TimHyde at C21Technology dot com
18-Jul-2002 07:04
A simpler way to implement an array_unshift with key=>value pairs (i.e. similar to the example using array_reverse above) is to use array_merge.  i.e.

<?php
$arrayone
=array_merge(array("newkey"=>"newvalue"),$arrayone);
?>

Obviously you need to take care when adding numeric or duplicate keys.
jrh_at_geodata.soton.ac.uk
10-Jul-2002 11:30
I have found array_unshift is a function that should be avoided when unshifting lots of data in large arrays.

In a recent script I wrote, it took approx. 24 seconds to unshift 3500 timestamps to an array, a work around could be to use array_reverse and array_push. Array_push is much faster due to the indexing.
robert dot wills at fuzzbrain dot uklinux dot net
07-Feb-2002 08:02
Actually this problem with the keys getting reindexed only happens when the keys are numerical:

<?php

$a
= array("f"=>"five", "s" =>"six", "t" =>
      
"twenty");

print_r($a);
echo
"\n";
foreach(
$a as $key=>$val)
{
   echo
"k: $key v: $val \n";
}

array_unshift($a, "zero");
print_r($a);
echo
"\n";
foreach(
$a as $key=>$val)
{
   echo
"k: $key v: $val \n";
}
?>

Array
(
   [f] => five
   [s] => six
   [t] => twenty
)

k: f v: five
k: s v: six
k: t v: twenty
Array
(
   [0] => zero
   [f] => five
   [s] => six
   [t] => twenty
)

k: 0 v: zero
k: f v: five
k: s v: six
k: t v: twenty
sahn at hmc dot edu
27-Jul-2001 02:21
If you need to prepend something to the array without the keys being reindexed and/or need to prepend a key value pair, you can use this short function:

<?php
function array_unshift_assoc(&$arr, $key, $val)
{
  
$arr = array_reverse($arr, true);
  
$arr[$key] = $val;
  
$arr = array_reverse($arr, true);
   return
count($arr);
}
?>
matt at synergie dot net
19-Sep-2000 12:20
The behaviour of unshift nearly caught me out.
Not only is the item added at the start of the list but the list is re-indexed too.

<?php

$a
= array(5=>"five", 6 =>"six", 20 => "twenty");

while(list(
$key, $value) = each($a))
   echo
"k: $key v: $value<BR>\n";

echo
"<BR>\n";
array_unshift($a, "zero");


while(list(
$key, $value) = each($a))
   echo
"k: $key v: $value<BR>\n";

?>

k: 5 v: five
k: 6 v: six
k: 20 v: twenty

k: 0 v: zero
k: 1 v: five
k: 2 v: six
k: 3 v: twenty

<array_uniquearray_values>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT