versiones tutorial sirve que programacion para lenguaje historia descargar code caracteristicas php

sirve - php tutorial



Teclas duplicadas de matriz asociativa de PHP (5)

Encontré esta pregunta al investigar exactamente el resultado deseado opuesto, ¡tengo una serie de datos que tienen claves duplicadas! Así es como lo hice (aún tratando de averiguar en qué parte de mi proceso las cosas se complican).

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

PHP 7.1

Edición: Es similar en PHP 7.2.10, excepto que json_encode ya no contiene claves duplicadas, las cadenas codificadas son correctas. La matriz, sin embargo, puede tener una cadena y claves enteras coincidentes.

Tengo una matriz asociativa, sin embargo, cuando le agrego valores usando la siguiente función, parece que se sobrescriben las mismas teclas. ¿Hay una manera de tener múltiples de las mismas claves con diferentes valores? ¿O hay otra forma de matriz que tiene el mismo formato?

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


No, no puede tener varios de la misma clave en una matriz asociativa.

Sin embargo, podría tener claves únicas, cada una 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

...Tu tienes esto:

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


No, no puedes tener. Una solución alternativa que utilizo es tener cada par de 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]


También tuve la misma necesidad de crear una matriz con las mismas claves, (solo para mantener el rendimiento mediante el uso de dos bucles en lugar de 4 bucles).

al usar esto: [$ increment. "-". $ domain_id] => $ article_id; Mi lista de artículos en cada dominio se ve así después de 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 repitiendo esta tabla para asociar el artículo por 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); }

obtienes esto

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


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