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'
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.
in_array() function is utilized to determine if specific value exists in an array. It works fine for one dimensional numeric and associative arrays.
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).
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)));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With