Поставить в начало массива php

PHP array_unshift

Summary: in this tutorial, you will learn how to use the PHP array_unshift() function to prepend one or more elements to the beginning of an array.

Introduction to the PHP array_unshift() function

To prepend one or more elements to an array, you use the array_unshift() function:

array_unshift ( array &$array , mixed . $values ) : intCode language: PHP (php)

The array_unshift() returns the new number of elements in the array.

Note that the array_unshift() function modifies the original array. The array_unshift() function prepends the elements to the input array as a whole. It preserves the prepended elements.

Since the array_unshift() function adds the new elements to the beginning of the input array, it changes the indexes to start from zero.

PHP array_unshift() examples

Let’s take some examples of using the PHP array_unshift() function.

1) Using PHP array_unshift() function to prepend one element to an array example

The following example uses the array_unshift() function to prepend an element to the beginning of an array:

 $permissions = [ 'edit', 'delete', 'view' ]; array_unshift($permissions, 'new'); print_r($permissions);Code language: HTML, XML (xml)
Array ( [0] => new [1] => edit [2] => delete [3] => view )Code language: plaintext (plaintext)
  • First, define an array with three elements.
  • Second, prepend the ‘new’ element to the beginning of the array.
  • Third, show the elements of the array using the print_r() function.

As you can see clearly from the output, the ‘new’ element gets the index zero while the existing indexes change accordingly.

2) Using PHP array_unshift() function to prepend one element to an array example

The following example uses the array_unshift() to prepend three elements to the beginning of an array:

 $permissions = [ 'edit', 'delete', 'view' ]; array_unshift($permissions, 'new', 'approve', 'reject'); print_r($permissions);Code language: HTML, XML (xml)
Array ( [0] => new [1] => approve [2] => reject [3] => edit [4] => delete [5] => view )Code language: plaintext (plaintext)

Prepending an element to the beginning of an associative array

To prepend an element to an associative array, you use the + operator. For example:

 $colors = [ 'red' => '#ff000', 'green' => '#00ff00', 'blue' => '#0000ff', ]; $colors = ['black' => '#000000'] + $colors; print_r($colors);Code language: HTML, XML (xml)
Array ( [black] => #000000 [red] => #ff000 [green] => #00ff00 [blue] => #0000ff )Code language: PHP (php)

Summary

  • Use the PHP array_prepend() function to preprend one or more elements to the beginning of an array.

Источник

array_unshift

array_unshift() добавляет переданные в качестве аргументов элементы в начало массива array . Обратите внимание, что список элементов добавляется целиком, то есть порядок элементов сохраняется. Все числовые ключи будут изменены таким образом, что нумерация массива будет начинаться с нуля, в то время как строковые ключи останутся прежними.

Замечание:

Сбрасывает внутренний указатель массива на первый элемент.

Список параметров

Возвращаемые значения

Возвращает новое количество элементов в array .

Список изменений

Версия Описание
7.3.0 Теперь эта функция может быть вызвана с одним параметром. Ранее требовалось минимум два параметра.

Примеры

Пример #1 Пример использования array_unshift()

array_unshift ( $queue , «apple» , «raspberry» );
var_dump ( $queue );
?>

Результат выполнения данного примера:

array(4) < [0] =>string(5) "apple" [1] => string(9) "raspberry" [2] => string(6) "orange" [3] => string(6) "banana" >

Пример #2 Пример использования с ассоциативными массивами

Если один ассоциативный массив добавляется к другому ассоциативному массиву, то добавляемый массив продолжает числовой индекс первого массиве.

$foods = [
‘apples’ => [
‘McIntosh’ => ‘red’ ,
‘Granny Smith’ => ‘green’ ,
],
‘oranges’ => [
‘Navel’ => ‘orange’ ,
‘Valencia’ => ‘orange’ ,
],
];
$vegetables = [
‘lettuce’ => [
‘Iceberg’ => ‘green’ ,
‘Butterhead’ => ‘green’ ,
],
‘carrots’ => [
‘Deep Purple Hybrid’ => ‘purple’ ,
‘Imperator’ => ‘orange’ ,
],
‘cucumber’ => [
‘Kirby’ => ‘green’ ,
‘Gherkin’ => ‘green’ ,
],
];

array_unshift ( $foods , $vegetables );
var_dump ( $foods );

Результат выполнения данного примера:

array(3) < [0] =>array(3) < 'lettuce' =>array(2) < 'Iceberg' =>string(5) "green" 'Butterhead' => string(5) "green" > 'carrots' => array(2) < 'Deep Purple Hybrid' =>string(6) "purple" 'Imperator' => string(6) "orange" > 'cucumber' => array(2) < 'Kirby' =>string(5) "green" 'Gherkin' => string(5) "green" > > 'apples' => array(2) < 'McIntosh' =>string(3) "red" 'Granny Smith' => string(5) "green" > 'oranges' => array(2) < 'Navel' =>string(6) "orange" 'Valencia' => string(6) "orange" > >

Смотрите также

  • array_shift() — Извлекает первый элемент массива
  • array_push() — Добавляет один или несколько элементов в конец массива
  • array_pop() — Извлекает последний элемент массива

User Contributed Notes 12 notes

You can preserve keys and unshift an array with numerical indexes in a really simple way if you’ll do the following:

$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′
);

array_merge() will also reindex (see array_merge() manual entry), but the ‘+’ operator won’t, so.

$arrayone =array( «newkey» => «newvalue» ) + $arrayone ;
?>

does the job.

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:

Anonymous’ associative version wasn’t working for me, but it did with this small tweak:

Another way to tack something to the beginning of an array is with array_merge().

$plans = array(‘AARP’=>’Senior’, ‘AAA’=>’Automobile Club’);

$plans = array_merge(array(«BAR»=>»Best Available Rate»), $plans);

This becomes a nice little problem if you index your arrays out of order (while manually sorting). For example:

$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
» ;
>
array_unshift ( $recordMonths , ‘%’ );
for( $i = 0 ; $i < count ( $recordMonths ); $i ++)
<
$singleMonth = $recordMonths [ $i ];
echo «singleMonth: $singleMonth
» ;
>
?>

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.

even simpler unshifting of a reference !
/**
* @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 ;
>
?>

Actually this problem with the keys getting reindexed only happens when the keys are numerical:

$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

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:

If you need to change the name of a key without changing its position in the array this function may be useful.

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 );
>
?>

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:

array_unshift ( $myArray , array_shift ( $myArray ));
?>

Last version of PHP deprecated unshifting of a reference.
You can use this function instead :

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 ));
?>

Оцените статью