Ver Mensaje Individual
  #5 (permalink)  
Antiguo 25/03/2010, 18:27
steeben
 
Fecha de Ingreso: septiembre-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Problema con array_merge

Bien a mi me paso algo parecido pero solo en PHP 5.x en PHP4 no me dio el problema.

Tengo tres array, los cuales pueden o no estar seteados, o sea si vienen valores quedan seteados sino los array no estan ni declarados.

Yo recupero valores del post que son checkbox y si vienen los mando a un array.

Código PHP:
Ver original
  1. while(list($Key,$Val)=each($_POST)){
  2.         if(substr($Key,0,7)=="Entity_")
  3.             $List1[] = substr($Key,7);
  4.         if(substr($Key,0,5)=="Base_")
  5.             $List2[] = substr($Key,5);
  6.         if(substr($Key,0,7)=="UserId_")
  7.             $List3[] = substr($Key,7);
  8. }

Ahora Para los dos primeros obtengo datos (los nombres de variables los cambie para no revelar datos).

Código PHP:
Ver original
  1. if(List1) // Si esta seteado
  2.     $Array1 = GetUsersIdByEntity(implode(",",$List1));
  3. if(List2) // Si esta seteado
  4.     $Array2 = GetUsersIdByEntity(implode(",",$List2));
Bien ahora $Array1, $Array2 y $List son Arrays que contienen Id de Usuarios, los dos primeros fueron obtenidos de una funcion pasandole como paramentro un string con Id de Entidades separadas por coma, de las cuales me retorna todos los Id de Usuarios para c/entidad.

Bien el caso ahora es que estos valores son dinámicos pues depende de los checbox que seleccione el usuario asi q cualquiera de los array puede venir vacio y ante la aucencia de uno de ellos PHP5.x me retorna NULL al unirlos con la función array_merge($Array1,$Array2,$List3).

Validar que Matriz se encuentra declarada y despues hacer la union es un método muy primitivo y lento (para mi), por lo q pense deve habar una soloción mas prolija al tema y efectivamente la hay.

En los lenguajes de programación existe algo que se llama casteo, el casteo lo que hace en simples terminos es decirle a una variable como deve de ser interpretada o sea si yo tnego una variable que es un string con un numero puedo decirle q se interprete como Int.

el casteo se hace poniendole el tipo de datos delante de la varibale de esta forma
Código PHP:
Ver original
  1. $NewValue = (tipo de dato) $variable;
  2.  
  3. $NewValue = (int) $Var="12";

Concretamente mi solución es la siguiente.
Código PHP:
Ver original
  1. $NewUserList  = array_merge((array)$Array1,(array)$Array2,(array)$List3);

Con esto la función array_merge de PHP interpretara cada elemento pasado a la funcion como un array, y si esta vacio no da error ni retorna NULL.


Espero haber dado una mano en algo!

Esteban Novo