
steven
Tengo una matriz asociativa, sin embargo, cuando le agrego valores usando la siguiente función, parece sobrescribir las mismas claves. ¿Hay alguna manera de tener varias claves iguales con valores diferentes? ¿O hay otra forma de matriz que tenga 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 múltiples de la misma clave en una 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 vez 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 )
)
Una clave es una extensión de una variable. Si sobrescribe la variable… sobrescribe la variable.
No, no puedes tener. Una solución que uso es tener 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]

Miguel
Encontré esta pregunta mientras investigaba el resultado previsto exactamente opuesto, ¡tengo una serie de datos que tienen claves duplicadas! Así es como lo hice (todavía estoy tratando de averiguar en qué parte de mi proceso las cosas están fallando).
$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
Editar: es similar en PHP 7.2.10, excepto que json_encode ya no admite claves duplicadas, las cadenas codificadas son correctas. La matriz, sin embargo, puede tener cadenas coincidentes y claves enteras.

Aymén
También tuve la misma necesidad de crear una matriz con las mismas teclas (solo para mantener el rendimiento usando dos bucles en lugar de 4 bucles).
usando esto: [$increment.”-“.$domain_id] => $articulo_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, recorriendo 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
)

Santosh Devnath
no es posible técnicamente. Pero creé una forma divertida de hacerlo 😂😂😂😂. Esté alerta, esta respuesta es solo por diversión, el objetivo final es obtener el resultado de todos modos.
Así que aquí está la respuesta. Primero debe convertir toda la matriz a la cadena. Luego, el resto de las cosas es solo reemplazo de cadenas y un pequeño código.
<?php
$ary="array('a'=>123,'a'=>161,'a'=>195)";
$str = str_replace("array(", "", $ary);
$str = str_replace(")", "", $str);
$arr = explode(",",$str);
foreach($arr as $element){
$element = str_replace("=>", "", $element);
$element = str_replace("'", "", $element);
echo $element.'<br>';
}
?>
Aquí está la salida

¿Cuál es el significado de estas teclas numéricas?
– Tu sentido común
21 de mayo de 2010 a las 2:09