array_unshift

(PHP 4, PHP 5)

array_unshift Inserisce uno o più elementi all'inizio dell'array

Descrizione

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

array_unshift() aggiunge gli elementi specificati in testa ad array. Si noti che la lista di elementi è aggiunta in blocco, in modo tale che gli elementi rimangano nello stesso ordine. Tutte le chiavi numeriche vengono modificate per iniziare da zero mentre le chiavi alfabetiche non sono modificate.

Restituisce il nuovo numero di elementi in array.

Example #1 esempio di array_unshift()

<?php
$lista 
= array("arancia""banana");
array_unshift($lista"mela""lampone");
?>

In questo modo $lista conterrà i seguenti elementi:

Array
(
    [0] => mela
    [1] => lampone
    [2] => arancia
    [3] => banana
)

Vedere anche array_shift(), array_push() e array_pop().

add a note add a note

User Contributed Notes 10 notes

up
21
Anonymous
3 years ago
Sahn's example almost works but has a small error. Try it like this 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;
    return =
array_reverse($arr, true);
}
?>
up
17
sergei at gmx dot net
7 years ago
You can preserve keys and unshift an array with numerical indexes in a really simple way if you'll do the following:

<?php
$someArray
=array(224=>'someword1', 228=>'someword2', 102=>'someword3', 544=>'someword3',95=>'someword4');

$someArray=array(100=>'Test Element 1 ',255=>'Test Element 2')+$someArray;
?>

now the array looks as follows:

array(
100=>'Test Element 1 ',
255=>'Test Element 2'
224=>'someword1',
228=>'someword2',
102=>'someword3',
544=>'someword3',
95=>'someword4'
);
up
8
rsmith_NOSPAM_ at _NOSPAM_unitec dot ac dot nz
12 years ago
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.
up
3
amschroeder at gmail dot com
7 years ago
This becomes a nice little problem if you index your arrays out of order (while manually sorting).  For example:

<?php
$recordMonths
[3] = '8/%/2006';
$recordMonths[4] = '7/%/2004';
$recordMonths[0] = '3/%/2007';
$recordMonths[1] = '2/%/2007';
$recordMonths[5] = '12/%/2000';
$recordMonths[6] = '11/%/2000';
$recordMonths[7] = '10/%/2000';
$recordMonths[2] = '1/%/2007';

for(
$i = 0; $i < count($recordMonths); $i++)
{
   
$singleMonth = $recordMonths[$i];
    echo
"singleMonth: $singleMonth <br />";
}
array_unshift($recordMonths,'%');
for(
$i = 0; $i < count($recordMonths); $i++)
{
   
$singleMonth = $recordMonths[$i];
    echo
"singleMonth: $singleMonth <br />";
}
?>

Produces:

singleMonth: 3/%/2007
singleMonth: 2/%/2007
singleMonth: 1/%/2007
singleMonth: 8/%/2006
singleMonth: 7/%/2004
singleMonth: 12/%/2000
singleMonth: 11/%/2000
singleMonth: 10/%/2000
singleMonth: %
singleMonth: 8/%/2006
singleMonth: 7/%/2004
singleMonth: 3/%/2007
singleMonth: 2/%/2007
singleMonth: 12/%/2000
singleMonth: 11/%/2000
singleMonth: 10/%/2000
singleMonth: 1/%/2007

It reindexes them based on the order they were created.  It seems like if an array has all numeric indexes, then it should reindex them based on the order of their index.  Just my opinion...
up
4
robert dot wills at fuzzbrain dot uklinux dot net
12 years ago
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
up
1
John Brooking
8 years ago
I had a need tonight to convert a numeric array from 1-based to 0-based, and found that the following worked just fine due to the "side effect" of renumbering:

<?php
   array_unshift
( $myArray, array_shift( $myArray ));
?>
up
1
chris dot NoThxSpam dot given at hp dot com
11 years ago
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);
}
?>
up
1
sahn at hmc dot edu
13 years ago
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);
}
?>
up
0
php at electricsurfer dot com
10 years ago
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;
}
?>
up
0
lagroue
11 years ago
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));
?>
To Top