2010-05-21 17 views
15

Ho un array associativo, tuttavia quando aggiungo dei valori ad esso utilizzando la funzione seguente sembra sovrascrivere le stesse chiavi. C'è un modo per avere più chiavi uguali con valori diversi? O c'è un'altra forma di matrice che ha lo stesso formato?Tasti duplicati dell'array associativo PHP

voglio avere:

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

Codice:

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

qual è il significato di questi tasti numerici? –

risposta

27

No, non è possibile avere più della stessa chiave in un array associativo.

Si potrebbe tuttavia avere chiavi univoche ognuna delle quali valori corrispondenti sono array, e quegli array hanno più elementi per ogni chiave.

Così, invece di questo ...

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

... avete questa:

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

Una chiave è un'estensione di una variabile. Se si sovrascrive la variabile ... si sovrascrive la variabile.

1

No, non è possibile. Una soluzione che uso è di avere ogni coppia chiave/valore come una nuova matrice di 2 elementi:

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

Ad esempio, è possibile accedere alla seconda chiave (= 42) utilizzando:

$test[1][0] 

e il secondo valore (= 86) utilizzando:

$test[1][1] 
0

i aveva la stessa necessità anche creare un array con le stesse chiavi, (solo per mantenere le prestazioni utilizzando due cicli anziché 4 loop).

utilizzando questo: [$ incremento. "-". $ Domain_id] => $ article_id; mia lista di articoli in ogni dominio si presenta così dopo 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 
) 

E poi scorrendo questa tabella per associare articolo di 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); 
    } 

si ottiene questo

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

Ho trovato questa domanda mentre ricercavo il risultato esatto opposto, ho una matrice di dati che ha chiavi duplicate! Ecco come l'ho fatto (ancora cercando di capire dove nel mio caso le cose stanno incasinando).

$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} 
*/ 

Sì .... è appena successo.

PHP 7.1

Problemi correlati