Foros del Web » Programando para Internet » PHP »

Recursividad. Buscar un número en un array x niveles de profundidad

Estas en el tema de Recursividad. Buscar un número en un array x niveles de profundidad en el foro de PHP en Foros del Web. Hola a todos y gracias por leer y más aún por contestar. No tengo lógica hecha para esto y no acabo de pillarlo. el caso ...
  #1 (permalink)  
Antiguo 16/02/2010, 14:26
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 17 años
Puntos: 16
Recursividad. Buscar un número en un array x niveles de profundidad

Hola a todos y gracias por leer y más aún por contestar. No tengo lógica hecha para esto y no acabo de pillarlo.
el caso es que me llega este array:
Código:
array(2) { 
[0]=>  array(2) { 
[0]=>  array(2) { 
["cas"]=>  string(22) "subsubcategoria-prueba" ["cat"]=>  string(21) "subsubcategoria-proba" 
} 
[1]=>  string(2) "43" 
} 
[1]=>  array(2) {
[0]=>  array(2) { 
[0]=>  array(2) { ["cas"]=>  string(18) "subsubsubcategoria" ["cat"]=>  string(19) "subsubsub-categorie" } 
[1]=>  string(2) "44" } [1]=>  array(0) { } 
} 
}
y de él tengo que extraer lo que serían las ids 43 y 44.
parto de la base de que no hay base, he estado mirando lo de la recursividad (ya que los niveles de profundidad en el array pueden ser uno o muchos) y he encontrado repetidas veces el ejercicio para sacar el factorial de un número, pero poco o nada más y con eso he creado esta función:
Código:
function agafa_ids($data)
		{
		foreach($data as $dato)
			{
			if(is_array($dato) )
				{
				$this->agafa_ids($dato);
				}
			else{
				if(is_numeric($dato))
					$ids[]=$dato;
				}
			}
		return $ids;
		}
y solo me devuleve el 43, no llega al 44.
Me podeis echar un cable?
Gracias de nuevo.
Un saludo
  #2 (permalink)  
Antiguo 17/02/2010, 04:06
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 17 años
Puntos: 16
Respuesta: Recursividad. Buscar un número en un array x niveles de profundidad

bueno, parece que voy cogiendo el tema, pero sigue sin funcionar, ha ampliado la funcion, ahora está asi:
Código:
function agafa_ids($data)
		{
		if(is_array($data))
		{
			foreach($data as $dato)
				{
				if(is_array($dato) )
					{
					$this->agafa_ids($dato);
					}
				else{
					if(is_numeric($dato))
						$ids[]=$dato;
					else
						$this->agafa_ids($dato);
					}
				}
			}else{
				$this->agafa_ids(next($data));
			}
		return $ids;
		}
por que he pensado que claro si no es array ni es numero, pero es string me hacía el return
pero me salta error en esta linea :
$this->agafa_ids(next($data)); un warning que dice que no es array ni un abjeto, claro, llega aqui cuando es un string. ¿cómo puedo pasar al siguiente? o estoy mareando mucho la perdiz?
¬¬" me he quedado pillada.
Gracias
  #3 (permalink)  
Antiguo 17/02/2010, 05:31
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 17 años
Puntos: 16
Respuesta: Recursividad. Buscar un número en un array x niveles de profundidad

bueno, he hecho esto a ver que esta cogiendome y devolviendome, y lo que veo es que cuando entra a la funcion de nuevo me pierde el valor del array donde voy guardando las ids....por que pintarmelas, me las pinta todas ¿Qué hago?
Código:
function agafa_ids($data)
		{
		$ids=array();
		//if(is_array($data))
			//{
			foreach($data as $dato)
				{
				echo "$dato--> " . $dato . " es ";
				if(is_array($dato))
					{
					echo "array <br>";
					$this->agafa_ids($dato);
					}
				else{
					if(is_numeric($dato) && $dato != NULL)
						{
						$ids=$dato;
						echo "numero <br>";
						}else{
						echo "otra cosa <br>";
						}
					}
				}
			//}else{
				
				//if(is_numeric($data))
					//$ids[]=$data;
				//else
					//$this->agafa_ids(next($data));
			//}
		echo "<hr>---->";
		var_dump($ids);
		echo "<hr>";
  #4 (permalink)  
Antiguo 17/02/2010, 05:42
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 17 años
Puntos: 16
Respuesta: Recursividad. Buscar un número en un array x niveles de profundidad

me han sugerido que en $this->agafa_ids($dato); ponga $ids[] = $this->agafa_ids($dato); pero nada....
  #5 (permalink)  
Antiguo 17/02/2010, 06:54
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Respuesta: Recursividad. Buscar un número en un array x niveles de profundidad

loading...........


Debes extraer todas las KEYS que sean de tipo numeral? (33, 34) o puede ser (7676 y 9128378917) ???

o tambien el valor de las keys de tipo numeral.
saludos.


connection closed.
__________________

Maborak Technologies
  #6 (permalink)  
Antiguo 17/02/2010, 07:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 17 años
Puntos: 16
Respuesta: Recursividad. Buscar un número en un array x niveles de profundidad

no entiendo muy bien la pregunta...
me podría venir 9128378917 como dices, pero por dios! espero que no!! que esto es un autonumerico y llegar a eso ...bufff.
yo quisiera que me devolviera un array (43,44, 56, 98)
lo he tocado ya un poco, y sigue sin funcionar.
La idea ahora es, antes de llamar a la recursiva, llamar a una funcion que inicie el array donde se van a guardar y esta ya, llame a la funcion...pero sigue sin hacer lo que tiene que hacer.
Muchisimas gracias por contestar, estoy ya de los pelos.


llamo a la que inicio:
Código:
$ids=$this->ini_agafa_ids($data);
esta es la funcion de inicio:
Código:
function ini_agafa_ids($data)
		{
		$ids= array();
		$ids[]=$this->agafa_ids($data);
		echo "<hr>";
		var_dump($ids);
		echo "<hr>";
		return $ids;
		}
y asi tengo la recursiva:

Código:
function agafa_ids($data)
		{
		foreach($data as $dato)
			{
			//echo "$dato--> " . $dato . " es ";
			if(is_array($dato))
				{
				//echo "array <br>";
				//$this->agafa_ids($dato);
				$ids[] = $this->agafa_ids($dato);

				}
			else{
				if(is_numeric($dato) && $dato != NULL)
					{
					$ids[]=$dato;
					//echo "numero <br>";
					}else{
					//echo "otra cosa <br>";
					}
				}
			}
		return $ids;
		}
Me devuelve esto:
esto de una pasada
array(1) { [0]=> array(2) { [0]=> NULL [1]=> string(2) "43" } }
y esto de otra
array(1) { [0]=> array(2) { [0]=> array(2) { [0]=> NULL [1]=> string(2) "44" } [1]=> NULL } }

no me los junta
  #7 (permalink)  
Antiguo 18/02/2010, 09:07
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 17 años
Puntos: 16
no me concatena

doy ya por imposible que no me guarde un array con las ids, por lo que he pensado pasar un string a la funcion e ir concatenando resultados y luego ya con un explode lo apañaré. Y me encuentro ahora con que no me lo concatena O_o"
por fabor debe ser un error tonto, por que si no, no me lo explico, pero es que no lo veooo ¿por qué no me lo concatena????
muchas gracias

llamada: $ids=$this->agafa_ids($data,"");

función:

Código:
function agafa_ids($data, $string="")
		{
		foreach($data as $dato)
			{
			if(is_array($dato))
				{
				$ids[] = $this->agafa_ids($dato,$string);
				}
			else{
				if(is_numeric($dato) && $dato != NULL && $dato!="")
					{
					$ids[]=$dato;
					$string .= ",". $dato;
					}
				}
			}
			var_dump($string);
		return $ids;
		}

Etiquetas: recursividad
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 15:16.