Foros del Web » Programando para Internet » PHP »

Duda con array multidimensional y funcion

Estas en el tema de Duda con array multidimensional y funcion en el foro de PHP en Foros del Web. Hola, estoy intentando generar una función que acumule ciertos datos un array, pero he tenido ciertas complicaciones, no parece ser tan complicado, sin embargo, no ...
  #1 (permalink)  
Antiguo 04/06/2014, 10:29
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 11 meses
Puntos: 6
Pregunta Duda con array multidimensional y funcion

Hola, estoy intentando generar una función que acumule ciertos datos un array, pero he tenido ciertas complicaciones, no parece ser tan complicado, sin embargo, no sé como solucionarlo.

la función agrega_array hace algo como esto

Código PHP:
function agrega_array($key,$valor){
    return 
$array = [$key => $valor];

luego agrego los datos de esta forma

Código PHP:
Ver original
  1. agreg_array("algo1","valor1");
  2. agreg_array("algo2","valor2");
  3. agreg_array("algo3","valor3");

aquí es cuando surge el problema

cuando imprimo el array para ver los valores veo algo como esto:

Código:
Array
(
    [algo1] => valor1
)
Array
(
    [algo2] => valor2
)
Array
(
    [algo3] => valor3
)
pero quiero que sea como esto:

Código:
Array
(
    Array
    (
    [algo1] => valor1
    )
    Array
    (
    [algo2] => valor2
    )
    Array
    (
    [algo3] => valor3
    )
)
no encuentro la manera de solucionarlo, alguien podría decirme ¿cual sería la manera correcta?

saludos!
  #2 (permalink)  
Antiguo 04/06/2014, 10:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Duda con array multidimensional y funcion

Código PHP:
Ver original
  1. <?php
  2.  
  3. include 'debug.php';
  4.  
  5. function agrega_array(&$arr,$key,$valor){
  6.     return $arr[$key] = $valor;
  7. }  
  8.  
  9. $a = [];
  10.  
  11. agrega_array($a,"algo1","valor1");
  12. agrega_array($a,"algo2","valor2");
  13. agrega_array($a,"algo3","valor3");
  14.  

Claro que directamente puedes hacer $tu_array[$tu_key] ... no es necesaria una funcion para eso.

Salida:

Cita:
Array
(
[algo1] => valor1
[algo2] => valor2
[algo3] => valor3
)
__________________
Salu2!
  #3 (permalink)  
Antiguo 04/06/2014, 10:59
Avatar de gepd  
Fecha de Ingreso: diciembre-2007
Mensajes: 142
Antigüedad: 16 años, 11 meses
Puntos: 6
Respuesta: Duda con array multidimensional y funcion

Gracias por la respuesta Italico76,

voy entendiendo la solución. Utilizo una función para crearlo porque es parte de un código más complejo, pero que no viene al caso.

¿cómo podría hacer para no pasar la variable $a en la función, si no hacerlo en la función misma?

para que sea

Código PHP:
Ver original
  1. agrega_array("algo1","valor1");

gracias nuevamente
  #4 (permalink)  
Antiguo 04/06/2014, 11:25
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Duda con array multidimensional y funcion

Cita:
Iniciado por gepd Ver Mensaje
¿cómo podría hacer para no pasar la variable $a en la función, si no hacerlo en la función misma?

para que sea

Código PHP:
Ver original
  1. agrega_array("algo1","valor1");

gracias nuevamente
Tienes 2 formas:

- Con variables globales ..... [desaconsejado]

Código PHP:
Ver original
  1. function agrega_array($key,$valor){
  2.     global $arr;   
  3.     return $arr[$key] = $valor;
  4. }  
  5.  
  6. $arr = [];
  7.  
  8. agrega_array("algo1","valor1");
  9. agrega_array("algo2","valor2");
  10. agrega_array("algo3","valor3");
  11.  
  12. debug($arr);

- Creando una clase (estatica) y pues agregar() seria un metodo de la misma e idealmente no seteas el puntero o referencia con el constructor sino que tu array es un elemento privado de la clase.
__________________
Salu2!

Última edición por Italico76; 04/06/2014 a las 12:28
  #5 (permalink)  
Antiguo 04/06/2014, 13:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Duda con array multidimensional y funcion

Por lo que entiendo, quieres que cada par de valores esté en un array y este dentro de otro, haciéndolo bidimensional. De ser así, podrías insertar los arrays generados en una sola línea con la función array_push.

Código PHP:
Ver original
  1. array_push($arr, agrega_array("algo1","valor1"), agrega_array("algo2","valor2"), agrega_array("algo3","valor3"));

Aunque se me ocurre hacerlo de otra manera:

Código PHP:
Ver original
  1. function agrega_array(){
  2.     $array = [];
  3.     $args = func_get_args();
  4.     $total = count($args);
  5.     $i = 0;
  6.     while($total--) $array[] = $args[$i++];
  7.     return $array;
  8. }
  9. print_r(agrega_array(['algo1' => 'valor1'], ['algo2' => 'valor2'], ['algo3' => 'valor3']));

Lo anterior imprimirá lo siguiente:

Código HTML:
Ver original
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [algo1] => valor1
  6.         )
  7.  
  8.     [1] => Array
  9.         (
  10.             [algo2] => valor2
  11.         )
  12.  
  13.     [2] => Array
  14.         (
  15.             [algo3] => valor3
  16.         )
  17.  
  18. )

La ventaja estará en que solamente llamarás una vez a la función agrega_array() y no cada vez que crees un array.

Y si no quieres pasar arrays como argumentos, puedes crearlos en la misma función:

Código PHP:
Ver original
  1. function agrega_array(){
  2.     $array = [];
  3.     $args = func_get_args();
  4.     $total = count($args);
  5.     $i = 0;
  6.     while($total--){
  7.         $par = explode(', ', $args[$i++]);
  8.         $array[] = [$par[0] => $par[1]];
  9.     }
  10.     return $array;
  11. }
  12. print_r(agrega_array('algo1, valor1', 'algo2, valor2', 'algo3, valor3'));

El resultado es el mismo que el de la función anterior.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 05/06/2014 a las 00:49 Razón: Extra
  #6 (permalink)  
Antiguo 04/06/2014, 14:09
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 4 meses
Puntos: 379
Respuesta: Duda con array multidimensional y funcion

Código PHP:
Ver original
  1. agreg_array("algo1","valor1");
  2. agreg_array("algo2","valor2");
  3. agreg_array("algo3","valor3");

Si se puede hacer de esta forma e ir llenando el arreglo, pero creo que con los ejemplos que ya le proporcionaron tiene para probar y deducirlo el solo.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: arreglo, funcion, function, multidimensional
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:58.