Claves duplicadas de matrices asociativas de PHP

4 minutos de lectura

Claves duplicadas de matrices asociativas de PHP
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;
    }

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

    – Tu sentido común

    21 de mayo de 2010 a las 2:09

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] 

  • Si bien el resultado final de la asignación de var no puede mostrar varias claves, aún puede definirlas en el momento de la definición. Ejemplo: $mytab = array('a' => 'valA', 'b' => 'valB', 'a' => 'anotherValA'); El comportamiento a esperar entonces es que el el ultimo que habla tiene razon. Terminarías con esta matriz: { a => anotherValA, b => valB}

    – Fabien Haddadi

    2 de junio de 2021 a las 13:12

  • @FabienHaddadi, ¿cuál es la razón para hacer esto, ya que el primero será sobrescrito por el segundo? este es un error intencional.

    – Aris

    2 de junio de 2021 a las 13:28

  • ninguna razón válida! Mala práctica. Es posible, punto 🙂 Acabo de arreglar eso en el código de mi Cliente hace unas horas…

    – Fabien Haddadi

    2 de junio de 2021 a las 16:04

1646970789 184 Claves duplicadas de matrices asociativas de PHP
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.

1646970789 803 Claves duplicadas de matrices asociativas de PHP
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
)

Claves duplicadas de matrices asociativas de PHP
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
ingrese la descripción de la imagen aquí

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad