Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add an array value to the middle of an associative array?

Lets say I have this array:

$array = array('a'=>1,'z'=>2,'d'=>4);

Later in the script, I want to add the value 'c'=>3 before 'z'. How can I do this?

Yes, the order is important. When I run a foreach() through the array, I do NOT want this newly added value added to the end of the array. I am getting this array from a mysql_fetch_assoc()

The keys I used above are placeholders. Using ksort() will not achieve what I want.

http://www.php.net/manual/en/function.array-splice.php#88896 accomplishes what I'm looking for but I'm looking for something simpler.

Take a sample db table with about 30 columns. I get this data using mysql_fetch_assoc(). In this new array, after column 'pizza' and 'drink', I want to add a new column 'full_dinner' that combines the values of 'pizza' and 'drink' so that when I run a foreach() on the said array, 'full_dinner' comes directly after 'drink'

like image 313
Citizen Avatar asked Jan 27 '10 18:01

Citizen


People also ask

How do you add a value to the middle of an array?

Adding Elements to the MiddleThe splice() function also lets you add elements to the middle of the array. JavaScript arrays have a push() function that lets you add elements to the end of the array, and an unshift() function that lets you add elements to the beginning of the array.

Does In_array work for associative array?

in_array() function is utilized to determine if specific value exists in an array. It works fine for one dimensional numeric and associative arrays.

How do you add the values at the end in the array in PHP?

The array_push() function inserts one or more elements to the end of an array. Tip: You can add one value, or as many as you like. Note: Even if your array has string keys, your added elements will always have numeric keys (See example below).


1 Answers

Am I missing something?

$key = 'z'; $offset = array_search($key, array_keys($array));  $result = array_merge         (             array_slice($array, 0, $offset),             array('c' => 3),             array_slice($array, $offset, null)         ); 

Handling of nonexistent keys (appending $data by default):

function insertBeforeKey($array, $key, $data = null) {     if (($offset = array_search($key, array_keys($array))) === false) // if the key doesn't exist     {         $offset = 0; // should we prepend $array with $data?         $offset = count($array); // or should we append $array with $data? lets pick this one...     }      return array_merge(array_slice($array, 0, $offset), (array) $data, array_slice($array, $offset)); } 

Demo:

$array = array('a' => 1, 'z' => 2, 'd' => 4);  // array(4) { ["a"]=> int(1) ["c"]=> int(3) ["z"]=> int(2) ["d"]=> int(4) } var_dump(insertBeforeKey($array, 'z', array('c' => 3)));  // array(4) { ["a"]=> int(1) ["z"]=> int(2) ["d"]=> int(4) ["c"]=> int(3) } var_dump(insertBeforeKey($array, 'y', array('c' => 3))); 
like image 148
Alix Axel Avatar answered Oct 08 '22 04:10

Alix Axel