How to push both value and key into PHP array [duplicate]
Asked Answered
M

21

465

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)

Modestomodesty answered 23/1, 2010 at 0:44 Comment(0)
T
971

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;
Thain answered 23/1, 2010 at 0:45 Comment(7)
How to add multiple keys and values to an array? for example I have [indexname1] = $value1 and [indexname2] = $value2, and I want to add them to $arraynameOtolaryngology
@KingGoeks $arrayname = array('indexname1' => $value1, 'indexname2' => $value2); would set them as the only items in $arrayname. If you already have $arrayname set and want to keep its values, try $arrayname += $anotherarray. Keep in mind any existing keys in the first array would be overwritten by the second.Salsala
"Keep in mind any existing keys in the first array would be overwritten by the second" that is not true, the first array has priority. if you do $a = array("name" => "John"); $a += array("name" => "Tom");then $a["name"] will be "John"Underachieve
it is the faster of the two: array_push vs array[]. Array[] is about 2x as fast if i remember correctly...Ragin
this is very fine and possibly the best for named-key arrays; only ensure that the key-name (the named index) does not clash with an already existing one. also ensure that the parent array exists first before you start 'pushing' your items into it.Biggin
Warning: $a['123'] = 456; - string '123' is converted to integer key 123.Abrade
I have been coding professionally in php for more than 2 years..... I am ashamed that I actually had to look for this and didnt immediately click in my brain.Ox
H
104

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;
Herrod answered 28/5, 2010 at 3:52 Comment(0)
S
89

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 http://php.net/manual/en/function.array-merge.php.

Salsala answered 21/1, 2013 at 22:52 Comment(1)
The basic difference between array_merge() and + operator is when the 2 arrays contain values on the same key + operator ignores the value from second array (does not override), also it does not renumber/reindex the numeric keys...Fausta
S
68

I wonder why the simplest method hasn't been posted yet:

$arr = ['company' => 'Apple', 'product' => 'iPhone'];
$arr += ['version' => 8];
Strohbehn answered 21/2, 2017 at 13:25 Comment(4)
it is not exactly the same, in array_merge, the array on the right wins on key conflict, in " += " the array on the left winsUnderachieve
@santiagoarizti What do you mean by "wins"?Strohbehn
if two arrays have both the same key, array_merge and array union (+=) behave in the opposite way i.e. array_merge will respect the value from the second array and array union will respect the value from the first array.Underachieve
Legend!! Just $arr += [$key => $value]; did it perfectly fine for me, thanks!Wycliffite
O
26

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

Ordonnance answered 5/5, 2015 at 10:24 Comment(0)
T
22

Exactly 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.

Totalitarianism answered 23/1, 2010 at 0:48 Comment(0)
H
13

2023

A lot of answers. Some helpful, others good but awkward. Since you don't need complicated and expensive arithmetic operations, loops etc. for a simple operation like adding an element to an array, here is my collection of One-Liner-Add-To-Array-Functions.

$array = ['a' => 123, 'b' => 456]; // init Array

$array['c'] = 789; // 1.
$array += ['d' => '012']; // 2.
$array = array_merge($array, ['e' => 345]); // 3.
$array = [...$array, 'f' => 678]; // 4.

print_r($array);
// Output:
/* 
Array
(
    [a] => 123
    [b] => 456
    [c] => 789
    [d] => 012
    [e] => 345
    [f] => 678
)
*/

In 99,99% i use version 1. ($array['c'] = 789;). But i like version 4. That is the version with the splat operator (https://www.php.net/manual/en/migration56.new-features.php).

Hofuf answered 30/1, 2023 at 13:4 Comment(1)
Please start your counting from 0. We arent barbarians.Vernellvernen
D
9

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!

Doublefaced answered 28/5, 2010 at 3:38 Comment(0)
A
9

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"}]

Acoustics answered 26/5, 2015 at 21:0 Comment(0)
C
8

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)
Credent answered 6/6, 2015 at 15:49 Comment(0)
P
4

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>";
    }
Preoccupancy answered 2/11, 2015 at 16:6 Comment(0)
F
4

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])
Fern answered 13/3, 2019 at 20:34 Comment(0)
G
3

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,)

Geriatrician answered 23/1, 2010 at 0:44 Comment(0)
B
3
 $arr = array("key1"=>"value1", "key2"=>"value");
    print_r($arr);

// prints array['key1'=>"value1", 'key2'=>"value2"]

Bellwether answered 14/5, 2016 at 6:41 Comment(0)
E
3

The simple way:

$GET = array();    
$key = 'one=1';
parse_str($key, $GET);

http://php.net/manual/de/function.parse-str.php

Eliza answered 25/4, 2017 at 9:9 Comment(0)
G
2
array_push($arr, ['key1' => $value1, 'key2' => value2]);

This works just fine. creates the the key with its value in the array

Geum answered 16/1, 2017 at 11:50 Comment(1)
Downvoted. This just pushes a new array at the end of the existing $arr array.Strohbehn
S
2

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

Sukkoth answered 20/3, 2017 at 21:42 Comment(0)
E
2

For add to first position with key and value

$newAarray = [newIndexname => newIndexValue] ;

$yourArray = $newAarray + $yourArray ;
Electrotechnology answered 14/1, 2019 at 18:27 Comment(0)
J
1

There 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');
}
Jordanjordana answered 20/4, 2020 at 7:33 Comment(0)
H
0
array_push($GET, $GET['one']=1);

It works for me.

Hahnert answered 17/11, 2017 at 12:40 Comment(1)
This executes $GET['one']=1, then uses the return value of that statement (=1, the rvalue), and then executes array_push($GET, 1). Result = [0]->1, [one]->1Saloma
C
-3

I usually do this:

$array_name = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
Crownpiece answered 4/6, 2020 at 1:30 Comment(3)
This is not an array push though it does not help the question. Here check this and fix your answer.Ginzburg
array_push ( $array , $values )Ginzburg
php.net/manual/en/function.array-push.phpGinzburg

© 2022 - 2024 — McMap. All rights reserved.