PHP: How to Add an Array Element After a Specified Element?

It is often necessary to insert a new element into an existing array, but the new element needs to be added at a specific position, not at the beginning or end.

In PHP, there is no built-in function to add a value to the middle of an array. However, we can use the array_slice() function to split the array into two and add the new array element between them.

Examples

Associative Array

Inserting by Index

Add an element after the specified index. In the example, it's after the second element:

$array = [
	'one'   => 'one value',
	'two'   => 'two value',
	'three' => 'three value',
];

$array = array_slice( $array, 0, 2 ) + [ 'newKey' => 'newValue' ] + $array;

print_r( $array );

/*
Array (
	[one]    => one value
	[two]    => two value
	[newKey] => newValue
	[three]  => three value
)
*/

Inserting after a specified key (by key name)

Specify the key after which a new element should be added:

$array = [
	'one'   => 'one value',
	'two'   => 'two value',
	'three' => 'three value',
];

$after_key = 'two';

$index = array_search( $after_key, array_keys( $array ) );

$array = array_slice( $array, 0, $index + 1 ) + [ 'newKey' => 'newValue' ] + $array;

print_r( $array );

/*
Array(
	[one] => one value
	[two] => two value
	[newKey] => newValue
	[three] => three value
)
*/

Indexed Array

$array = [
	'one',
	'two',
	'three',
];

$array = array_merge(
	array_slice( $array, 0, 2 ),
	[ 'newValue' ],
	array_slice( $array, 2 )
);

print_r( $array );
/*
Array (
	[0] => one
	[1] => two
	[2] => newValue
	[3] => three
)
*/

Universal Function

For this solution, I propose a universal function:

/**
 * Inserts an array after a specified key in another array.
 *
 * This function searches for the specified key in the provided array. If the key is found,
 * it inserts the given array immediately after that key. If the key is not found, the given
 * array is appended to the end of the original array.
 *
 * @param array   $array         The original array to modify.
 * @param mixed   $key           The key after which the new array should be inserted.
 * @param array   $insert_array  The array to insert into the original array.
 *
 * @return void
 */
function array_insert_after_key( & $array, $key, $insert_array ) {

	$index = array_search( $key, array_keys( $array ) );

	// key is not found, add to the end of the array
	if( $index === false ){
		$array = array_merge( $array, $insert_array );
	}
	// split the array into two parts and insert a new element between them
	else{
		$array = array_merge(
			array_slice( $array, 0, $index + 1, true ),
			$insert_array,
			array_slice( $array, $index + 1, null, true )
		);
	}
}

Usage Examples

Associative Array

Example 1:

$array = [
	'a' => 1,
	'b' => 2,
	'c' => 3
];

array_insert_after_key( $array, 'b', [ 'newKey' => 'newValue' ] );

print_r( $array );
/*
Array (
	[a] => 1
	[b] => 2
	[newKey] => newValue
	[c] => 3
)
*/

Example 2:

$array = [
	'a' => 1,
	'b' => 2,
	'c' => 3
];

$inset_array = [
	'newKey'  => 'newValue',
	'newKey2' => 'newValue2',
];

array_insert_after_key( $array, 'b', $inset_array );

print_r( $array );

/*
Array (
	[a] => 1
	[b] => 2
	[newKey] => newValue
	[newKey2] => newValue2
	[c] => 3
)
*/

Indexed Array

Example 1:

$array1 = [
	1,
	2,
	3,
];

array_insert_after_key( $array1, 1, [ 'newValue' ] );

print_r( $array1 );

/*
Array (
	[0] => 1
	[1] => 2
	[2] => newValue
	[3] => 3
)
*/

Example 2:

$array1 = [
	1,
	2,
	3,
];

array_insert_after_key( $array1, 1, [ 'newValue', 'newValue2' ] );

print_r( $array1 );

/*
Array (
	[0] => 1
	[1] => 2
	[2] => newValue
	[3] => newValue2
	[4] => 3
)
*/

--