Take a look at this code:
$GET = array();
$key = 'one=1';
$rule = explode('=', $key);
/* array_push($GET, $rule[0] => $rule[1]); */I'm looking for something like this so that:
print_r($GET);
/* output: $GET[one => 1, two => 2, ...] */Is there a function to do this? (because array_push won't work this way)
20 Answers
Nope, there is no array_push() equivalent for associative arrays because there is no way determine the next key.
You'll have to use
$arrayname[indexname] = $value; 6 Pushing a value into an array automatically creates a numeric key for it.
When adding a key-value pair to an array, you already have the key, you don't need one to be created for you. Pushing a key into an array doesn't make sense. You can only set the value of the specific key in the array.
// no key
array_push($array, $value);
// same as:
$array[] = $value;
// key already known
$array[$key] = $value; 0 You can use the union operator (+) to combine arrays and keep the keys of the added array. For example:
<?php
$arr1 = array('foo' => 'bar');
$arr2 = array('baz' => 'bof');
$arr3 = $arr1 + $arr2;
print_r($arr3);
// prints:
// array(
// 'foo' => 'bar',
// 'baz' => 'bof',
// );So you could do $_GET += array('one' => 1);.
There's more info on the usage of the union operator vs array_merge in the documentation at .
I wonder why the simplest method hasn't been posted yet:
$arr = ['company' => 'Apple', 'product' => 'iPhone'];
$arr += ['version' => 8]; 4 I would like to add my answer to the table and here it is :
//connect to db ...etc
$result_product = /*your mysql query here*/
$array_product = array();
$i = 0;
foreach ($result_product as $row_product)
{ $array_product [$i]["id"]= $row_product->id; $array_product [$i]["name"]= $row_product->name; $i++;
}
//you can encode the array to json if you want to send it to an ajax call
$json_product = json_encode($array_product);
echo($json_product);hope that this will help somebody
0Exactly what Pekka said...
Alternatively, you can probably use array_merge like this if you wanted:
array_merge($_GET, array($rule[0] => $rule[1]));But I'd prefer Pekka's method probably as it is much simpler.
I was just looking for the same thing and I realized that, once again, my thinking is different because I am old school. I go all the way back to BASIC and PERL and sometimes I forget how easy things really are in PHP.
I just made this function to take all settings from the database where their are 3 columns. setkey, item (key) & value (value) and place them into an array called settings using the same key/value without using push just like above.
Pretty easy & simple really
// Get All Settings
$settings=getGlobalSettings();
// Apply User Theme Choice
$theme_choice = $settings['theme'];
.. etc etc etc ....
function getGlobalSettings(){ $dbc = mysqli_connect(wds_db_host, wds_db_user, wds_db_pass) or die("MySQL Error: " . mysqli_error()); mysqli_select_db($dbc, wds_db_name) or die("MySQL Error: " . mysqli_error()); $MySQL = "SELECT * FROM systemSettings"; $result = mysqli_query($dbc, $MySQL); while($row = mysqli_fetch_array($result)) { $settings[$row['item']] = $row['value']; // NO NEED FOR PUSH } mysqli_close($dbc);
return $settings;
}So like the other posts explain... In php there is no need to "PUSH" an array when you are using
Key => Value
AND... There is no need to define the array first either.
$array=array();
Don't need to define or push. Just assign $array[$key] = $value; It is automatically a push and a declaration at the same time.
I must add that for security reasons, (P)oor (H)elpless (P)rotection, I means Programming for Dummies, I mean PHP.... hehehe I suggest that you only use this concept for what I intended. Any other method could be a security risk. There, made my disclaimer!
This is the solution that may useful for u
Class Form {
# Declare the input as property
private $Input = [];
# Then push the array to it
public function addTextField($class,$id){ $this->Input ['type'][] = 'text'; $this->Input ['class'][] = $class; $this->Input ['id'][] = $id;
}
}
$form = new Form();
$form->addTextField('myclass1','myid1');
$form->addTextField('myclass2','myid2');
$form->addTextField('myclass3','myid3');When you dump it. The result like this
array (size=3) 'type' => array (size=3) 0 => string 'text' (length=4) 1 => string 'text' (length=4) 2 => string 'text' (length=4) 'class' => array (size=3) 0 => string 'myclass1' (length=8) 1 => string 'myclass2' (length=8) 2 => string 'myclass3' (length=8) 'id' => array (size=3) 0 => string 'myid1' (length=5) 1 => string 'myid2' (length=5) 2 => string 'myid3' (length=5) A bit late but if you don't mind a nested array you could take this approach:
$main_array = array(); //Your array that you want to push the value into
$value = 10; //The value you want to push into $main_array
array_push($main_array, array('Key' => $value));To clarify,
if you output json_encode($main_array) that will look like [{"Key":"10"}]
A bit weird, but this worked for me
$array1 = array("Post Slider", "Post Slider Wide", "Post Slider"); $array2 = array("Tools Sliders", "Tools Sliders", "modules-test"); $array3 = array(); $count = count($array1); for($x = 0; $x < $count; $x++){ $array3[$array1[$x].$x] = $array2[$x]; } foreach($array3 as $key => $value){ $output_key = substr($key, 0, -1); $output_value = $value; echo $output_key.": ".$output_value."<br>"; } $arr = array("key1"=>"value1", "key2"=>"value"); print_r($arr);// prints array['key1'=>"value1", 'key2'=>"value2"]
array_push($arr, ['key1' => $value1, 'key2' => value2]);This works just fine. creates the the key with its value in the array
1The simple way:
$GET = array();
$key = 'one=1';
parse_str($key, $GET); hi i had same problem i find this solution you should use two arrays then combine them both
<?php
$fname=array("Peter","Ben","Joe");
$age=array("35","37","43");
$c=array_combine($fname,$age);
print_r($c);
?>reference : w3schools
Example array_merge()....
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
Array([color] => green,[0] => 2,[1] => 4,[2] => a,[3] => b,[shape] => trapezoid,[4] => 4,)
For add to first position with key and value
$newAarray = [newIndexname => newIndexValue] ;
$yourArray = $newAarray + $yourArray ; I wrote a simple function:
function push(&$arr,$new) { $arr = array_merge($arr,$new);
}so that I can "upsert" new element easily:
push($my_array, ['a'=>1,'b'=>2]) array_push($GET, $GET['one']=1);It works for me.
1There are some great example already given here. Just adding a simple example to push associative array elements to root numeric index index.
$intial_content = array();
if (true) { $intial_content[] = array('name' => 'xyz', 'content' => 'other content');
} I usually do this:
$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
); 3