Necesito a cocos de PHP para una función

n1x3r

Hola, necesitaba crear una función que pudiese hacer lo siguiente.

Teniendo un string de este tipo:

$string = 'Avda andalucía 34 (1990) [amuebaldo, garaje][terraza.](muy bonito)'

Me tiene que separar la dirección (Avda andalucía 34) de las características sabiendo que la dirección puede estar separada por "(.[" (sin las comillas, son parentesis, punto y corchetes) y una vez separada la dirección de las características tengo que sacar las características que a mi me interesen, digamos que paso un string que ponga "garaje,terraza,amueblado,balcon,climatizado,despensa" y si encuentra alguna de estas palabras que me devuelva dichas características.

Resumiendo yo al mandarle ese string junto con las características a la función me tiene que devolver lo siguiente:

Array
(
            [direccion] => Avda andalucía 34
            [caracteristicas] => Array
                      (
                           [0] => amuebaldo
                           [1] => garaje
                           [2] => terraza
                         )
)

Supongo que estaré oxidado pero la forma de solucionarlo me parece que es muy engorrosa, me gustaría simplificarlo todo al máximo utilizado las funciones de php que se podrían utilizar para algo tan especifico como eso.

Un saludo a todos y muchas gracias.

PD: me acaban de sacar una muela y me duele mucho :S igual no puedo pensar con claridad :/

B

Usa el coco y google, creo que hay información de sobras en internet para hacer eso, busca las funciones de cadenas en php y aprende a usarlas http://php.net/manual/en/ref.strings.php

1 1 respuesta
GreyShock

Tiene más pinta de requerir expresiones regulares. Estoy muy pez con ellas, pero sé que son mágicas e ideales para lo que quieres hacer ahí. Así que tira de google y busca también un poquito de expresiones regulares.. o espera a una alma caritativa que te eche un cable en lugar de una indicación >_<

1 respuesta
BLZKZ

no hace falta regex para eso #3 xD con lo de #2 basta

1 respuesta
GreyShock

#4 Según entiendo a #1, el tipo de separador puede variar, así como la cantidad de argumentos o incluso pasar argumentos falsos o de moralla entre medias.

Se puede hacer con manejo de strings y un chorrito de condicionales, pero opino que con regex se puede hacer algo fino y optimizado. Entraña mucha más complicación si no dominas la expresiones regulares, pero sólo ofrezco alternativas :P

1 respuesta
BLZKZ

#5 bueno habia leido mal (salia la carita). Sí, tratamiento de strings con regex es lo más comodo, sería decir que separase todo al encontrar [ ( .

1 respuesta
n1x3r

La separación de la dirección lo tengo resuelto, se me vino a la cabeza después de tomarme un paracetamol xD, es esta:

	$separador = array('.','(','[');
	$dir = explode('.',strtolower($titulo));

foreach($separador as $d1){
$dir = explode($d1,$dir[0]);
}

echo $dir[0];

Ahora estoy atascado en lo de buscar las características y componer el array con ellas, estaba pensando en hacer otro explode con el string separandolo por espacios, después recorrer el array y con un switch case verificar opcion a opcion, pero seguro que se puede hacer de una forma mas sencilla :/

PD: igual si me tomo otro paracetamol... o 2 o 3... xD

LOc0
spoiler

Salu2 ;)

3 2 respuestas
eXtreM3

#8 Pero cómo eres tan puto amo de currarte SIEMPRE los códigos de los que preguntamos algo? En serio xD

offtopic: #6 mira lo que me he encontrado por ahí xDDD

http://board.ogame.com.es/board895-unpocodetodo/board32-inform%C3%A1tica/1022841-juegodecaracteresphp/

(no quiero hacer spam hacia este foro, simplemente me ha hecho gracia ver que allí no te conocía y después aqui con el mismo avatar y todo jajajaja)

con lo facil que era con un utf8_decode xD

2 respuestas
LOc0

#9 Sólo saneo un poco mi karma (por aquello de pedir los apuntes a todo el mundo durante la carrera xD), además que cuando son códigos tan breves es muy tentador...

Salu2 ;)

BLZKZ

#9 era mod de ese foro, btw llevo en mv más que en cualquier otro foro xD y siempre he usado el mismo avatar, asi que me podras encontrar en muchas webs así xD y mas si son de "desarrollo"

btw l0c0 <3

n1x3r

#8 lo solucione con unos bucles sin utilizar preg_match, aquí posteo la solución y es la que actualmente utilizo, yo es que soy muy reacio a utilizar regex es algo que no me gusta nada y como la programación tiene la virtud que para un mismo resultado se puede utilizar infnitas soluciones pues:

	function todasputas($string){
	$titulo = utf8_decode($string); //$cadena='Avda andalucía 34 (1990) [amueblado, garaje][terraza.](muy bonito)';
	$perroflauta = array('(','[','-','.');
	$direccion = explode(',',strtolower($titulo));
	foreach($perroflauta as $d1){
	$direccion = explode($d1,$direccion[0]);}
	$perroflauta = array('garaje','terraza','amueblado','balcon','climatizado','despensa');
	foreach($perroflauta as $d1){	
	if(strpos(strtolower(utf8_decode($titulo)),$d1))
	$c[] = $d1;}
	$final['dir'] = $direccion[0];
	$final['car'] = $c;
return $final;}

Muchas gracias a todos!!!

1 respuesta
B

#12 buen trabajo ^^

Usuarios habituales