Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Associative Array Duplicate Keys

Tags:

php

I have an associative array, however when I add values to it using the below function it seems to overwrite the same keys. Is there a way to have multiple of the same keys with different values? Or is there another form of array that has the same format?

I want to have:

42=>56
42=>86
42=>97
51=>64
51=>52
etc etc

Code:

   function array_push_associative(&$arr) {
       $args = func_get_args();
       foreach ($args as $arg) {
           if (is_array($arg)) {
               foreach ($arg as $key => $value) {
                   $arr[$key] = $value;
                   $ret++;
               }
           }else{
               $arr[$arg] = "";
           }
       }
       return $ret;
    }
like image 608
Steven Avatar asked May 21 '10 01:05

Steven


People also ask

Can associative array have same key?

No, you cannot have multiple of the same key in an associative array. You could, however, have unique keys each of whose corresponding values are arrays, and those arrays have multiple elements for each key.

Can a PHP array have duplicate keys?

Arrays contains unique key. Hence if u are having multiple value for a single key, use a nested / multi-dimensional array. =) thats the best you got.

How can we create a dynamic associative array in jquery?

var arr = []; $('input[name^=from]'). each(function(index,val) { var from = $(this). val(); if(typeof arr[index] === undefined) arr[index] = []; arr[index]. push({from:from}); }); $('input[name^=to]').


4 Answers

No, you cannot have multiple of the same key in an associative array.

You could, however, have unique keys each of whose corresponding values are arrays, and those arrays have multiple elements for each key.

So instead of this...

42=>56 42=>86 42=>97 51=>64 51=>52

...you have this:

Array (
    42 => Array ( 56, 86, 97 )
    51 => Array ( 64, 52 )
)
like image 128
Amber Avatar answered Oct 14 '22 03:10

Amber


A key is an extension of a variable. If you overwrite the variable ... you overwrite the variable.

like image 40
Mark Tomlin Avatar answered Oct 14 '22 01:10

Mark Tomlin


No, you cannot have. A workaround I use is to have each key/value pair as a new array with 2 elements:

$test = array(
     array(42,56),
     array(42,86),
     array(42,97),
     array(51,64),
     array(51,52)
)

For example, you can access the second key (=42) using:

$test[1][0]

and the second value(=86) using:

 $test[1][1] 
like image 24
Aris Avatar answered Oct 14 '22 02:10

Aris


I found this question while researching the exact opposite intended outcome, I have an array of data that has duplicate keys! Here's how I did it (still trying to figure out where in my process things are messing up).

$session = time();
$a = array();
$a[(string)$session] = 0;
$j = json_encode($a,JSON_FORCE_OBJECT);
print_r($a);
/* output:
Array
(
    [1510768034] => 0
)
*/
var_dump($a);
/* output:
array(1)
(
    [1510768034] =>   int(0)
)
*/
print_r($j);
/* output:
{"1510768034":0}
*/
$a = (array)json_decode($j);
$session = @array_pop(array_keys($a));
$a[(string)$session] = 10;
$j = json_encode($a,JSON_FORCE_OBJECT);
print_r($a);
/* output:
Array
(
    [1510768034] => 0
    [1510768034] => 10
)
*/
var_dump($a);
/* output:
array(2)
(
    '1510768034' => int(0)
    [1510768034] => int(10)
)
*/
print_r($j);
/* output:
{"1510768034":0,"1510768034":10}
*/

Yup....that just happened.

PHP 7.1

Edit: It's similar in PHP 7.2.10, except json_encode no longer entertains duplicate keys, encoded strings are correct. The array, however, can have matching string and integer keys.

like image 26
Michael Avatar answered Oct 14 '22 02:10

Michael