PHP - array_push dentro de función no actualiza array principal

 
Vista:

array_push dentro de función no actualiza array principal

Publicado por Alex Montoya (4 intervenciones) el 27/02/2020 16:58:53
Hola. Estoy tratando de hacer un array_push desde mi función a un array que se encuentra fuera de la función. Necesito encontrar el id dentro del array y hacer un array_push en la posición indicada. El push sí se hace, pero el array principal no se actualiza. Podrían ayudarme por favor. Este es mi código, gracias:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$estructura = array(
        "Tipo"=>"Líder",
        "Nombre"=>"Jaime",
        "Empresarios"=>[
          ["Tipo"=>"Empresario", "Nombre"=>"Gloria", "id"=>"233", "invitados"=> [
              ["Tipo"=>"Invitado", "Nombre"=>"María Juana", "id"=>"117", "invitados"=> []],
              ["Tipo"=>"Invitado", "Nombre"=>"Mario López", "id"=>"230", "invitados"=> []]
            ]
          ],
          ["Tipo"=>"Empresario", "Nombre"=>"Andrés", "id"=>"28", "invitados"=> [
              ["Tipo"=>"Invitado", "Nombre"=>"Camila", "id"=>"281", "invitados"=> [
                  ["Tipo"=>"Invitado", "Nombre"=>"Laura", "id"=>"57", "invitados"=> []],
                  ["Tipo"=>"Invitado", "Nombre"=>"Alex", "id"=>"84", "invitados"=> [
                      ["Tipo"=>"Invitado", "Nombre"=>"Catalina", "id"=>"900", "invitados"=> []],
                      ["Tipo"=>"Invitado", "Nombre"=>"Juan", "id"=>"700", "invitados"=> []]
                    ]
                  ],
                  ["Tipo"=>"Invitado", "Nombre"=>"Miguel", "id"=>"10", "invitados"=> []],
                ]
              ],
              ["Tipo"=>"Invitado", "Nombre"=>"Omar", "id"=>"282", "invitados"=> []]
            ]
          ]
        ]
      );
 
$array = $estructura['Empresarios'];
 
function buscarId(&$array, $id) {
 
    foreach($array as $key => $value) {
        if($value['id'] == $id) {
            $invitado = array("Tipo"=>"Invitado", "Nombre"=>"Gonzalo", "id"=>"91", "invitados"=> []);
            array_push($value['invitados'], $invitado);
            break;
        } else {
            if(count($value['invitados']) > 0) {
                $arr = $value['invitados'];
                buscarId($arr, $id);
            }
        }
    }
return $array;
}
 
$test = buscarId($array, 700);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

array_push dentro de función no actualiza array principal

Publicado por Julio (830 intervenciones) el 27/02/2020 17:34:30
Hola.

Telita con tu array, me parece muy poco manejable. Además, creo que lo tienes mal construido y sobre algún ].

No me da tiempo a mirar más, pero te lo he cambiado a esto (no está bien del todo aún):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
$estructura = [
  'Tipo' => 'Líder',
  'Nombre' => 'Jaime',
  'Empresarios' => [
    233 => [
      'Tipo' => 'Empresario',
      'Nombre' => 'Gloria',
      'invitados' => [
        117 => [
          'Tipo' => 'Invitado',
          'Nombre' => 'María Juana',
          'invitados' => []
        ],
        230 => [
          'Tipo' => 'Invitado',
          'Nombre' => 'Mario López',
          'invitados' => []
        ]
      ]
    ],
    28 => [
      'Tipo' => 'Empresario',
      'Nombre' => 'Andrés',
      'invitados' => [
        281 => [
          'Tipo' => 'Invitado',
          'Nombre' => 'Camila',
          'invitados' => [
            57 => [
              'Tipo' => 'Invitado',
              'Nombre' => 'Laura',
              'invitados' => []
            ],
            84 => [
              'Tipo' => 'Invitado',
              'Nombre' => 'Alex',
              'invitados' => [
                900 => [
                  'Tipo' => 'Invitado',
                  'Nombre' => 'Catalina',
                  'invitados' => []
                ],
                700 => [
                  'Tipo' => 'Invitado',
                  'Nombre' => 'Juan',
                  'invitados' => []
                ]
              ]
            ]
          ]
        ],
        10 => [
          'Tipo' => 'Invitado',
          'Nombre' => 'Miguel',
          'invitados' => []
        ],
        282 => [
          'Tipo' => 'Invitado',
          'Nombre' => 'Omar',
          'invitados' => []
        ]
      ]
    ]
  ]
];
 
function buscarId(&$array, $id, $invitado) {
  foreach ($array as $identidad => $persona) {
    if ($identidad == $id) {
      $persona['invitados'][] = $invitado;
      var_dump($persona);
      break;
    } else {
      buscarId($persona['invitados'], $id, $invitado);
    }
  }
}
 
echo '<pre>';
buscarId($estructura['Empresarios'], 700, [91 => ['Tipo' => 'invitado', 'Nombre' => 'Gonzalo', 'invitados' => []]]);
var_dump($estructura);
echo '</pre>';

Le he puesto algunos var_dump, así que si lo pruebas verás que llega al 700 y le inserta el invitado indicado, pero luego el array principal "no tiene" ese dato. Habría que mirar bien el por qué, pero no me da tiempo ahora. Quizá otro compañero pueda seguir ayudándote.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

array_push dentro de función no actualiza array principal

Publicado por Julio (830 intervenciones) el 27/02/2020 18:12:09
Por cierto, ¿no puedes montar ese array de otra forma muuuuuuuucho más cómoda y sencilla?

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

array_push dentro de función no actualiza array principal

Publicado por Alex Montoya (4 intervenciones) el 27/02/2020 19:35:09
Gracias. Pude resolverlo pasando como referencia &$persona y haciendo un return del array.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar