2010-05-21 15 views
15

Tengo una matriz asociativa, sin embargo, cuando le agrego valores usando la función siguiente, parece sobreescribir las mismas claves. ¿Hay alguna forma de tener varias de las mismas teclas con diferentes valores? ¿O hay otra forma de matriz que tiene el mismo formato?PHP Associative Array Duplicate Keys

quiero tener:

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

Código:

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; 
    } 
+0

¿Cuál es el significado de estas teclas numéricas? –

Respuesta

27

No, no se puede tener múltiplo de la misma clave en la matriz asociativa.

Sin embargo, podría tener claves únicas, cada uno de cuyos valores correspondientes son matrices, y esas matrices tienen múltiples elementos para cada clave.

Así que en lugar de esto ...

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

... que tienen la siguiente:

Array (
    42 => Array (56, 86, 97) 
    51 => Array (64, 52) 
) 
7

Una clave es una extensión de una variable. Si sobreescribe la variable ... sobrescribe la variable.

1

No, no puede tener. Una solución que uso es que cada par clave/valor como una nueva matriz con 2 elementos:

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

Por ejemplo, puede acceder a la segunda clave (= 42) usando:

$test[1][0] 

y el segundo valor (= 86) usando:

$test[1][1] 
0

i tenía la misma necesidad también crear una matriz con las mismas claves, (sólo para mantener el rendimiento mediante el uso de dos bucles en lugar de 4 bucles).

usando esto: [$ increment. "-". $ Domain_id] => $ article_id; mi lista de artículos en cada dominio se parece a esto después de un print_r():

$AllSa = Array 
(
    [1-5] => 143 
    [2-5] => 176 
    [3-5] => 992 
    [4-2] => 60 
    [5-2] => 41 
    [6-2] => 1002 
    [4-45] => 5 
    [5-45] => 18 
    [6-45] => 20 
) 

Y luego haciendo un bucle a través de esta tabla para asociar artículo de dominio:

$AssocSAPerDomain = array(); 
    $TempDomain  = ""; 
    $TempDomain_first = 0; 
    foreach($tree_array as $id_domain => $id_sa){ 
     if(!$TempDomain && $TempDomain_first == 0){ $TempDomain = substr(strrchr($id_domain, "-"), 1); $TempDomain_first = 1; } 
     $currentDomain = substr(strrchr($id_domain, "-"), 1); 
     //if($TempDomain == $currentDomain) 
     $AssocSAPerDomain[$currentDomain][] = $id_sa; 
     $TempDomain = substr(strrchr($id_domain, "-"), 1); 
    } 

recibe este

$assoc= Array 
(
    [5] => 143 
     => 176 
     => 992 
    [2] => 60 
     => 41 
     => 1002 
    [45]=> 5 
     => 18 
     => 20 
) 
0

Encontré esta pregunta mientras investigaba el resultado final exactamente opuesto, ¡tengo una matriz de datos que tiene claves duplicadas! Así es como lo hice (aún tratando de descubrir en qué parte de mi proceso las cosas se están metiendo).

$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 .... eso acaba de suceder.

PHP 7.1