|
|
 |
array_unshift (PHP 4, PHP 5) array_unshift --
Prepend one or more elements to the beginning of an array
Descriptionint 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
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);
}
array_unshift ($a, &$v);
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
| |