25/06/2011, 10:20
|
| | | Fecha de Ingreso: enero-2009 Ubicación: Mar del Plata
Mensajes: 220
Antigüedad: 15 años, 3 meses Puntos: 18 | |
Problema con Arrays y % de comparación Hola amigos de Foros del Web, hace bastante que no me pasaba por acá.
Estoy realizando un trabajito, y me quede absolutamente trabado en una parte que creía que era fácil. Les paso a comentar lo que quiero hacer:Tengo que comparar dos arrays con valores numéricos, cada valor es un ID de una enceusta. Cada array tiene las respuesta de un usuario. A partir de esos dos arrays tengo que obtener un tercer array con los resultados comunes de ambos.
Con ese nuevo array, tengo buscar la respuesta a esa encuesta por parte de dos usuarios. Tengo que comprar las respuestas, según las encuestas contestadas por porte de ambos y dar un porcentaje de compatibilidad. Las respuestas son 0 o 1.
Por ejemplo: Matias contesto las encuestas 1,2,3,4,5,6,7,8,9,10 y las respuestas a esas encuestas fueron 0,0,0,1,0,1,1,0,0,1 respectivamente.
Pero Juan contesto las encuestas 1,2,3,4,5 y las respuestas fueron 0,0,0,0,1 respectivamente.
En este caso la compatibilidad se calcularía asi:
Tienen 5 en común, entonces 5 respuestas es el 100%.
Pero respondieron 3 encuestas de la misma forma.
Entonces
5 _ 100%
3 _ X%
X = 3*100/5
X = 60% Y esto es lo que hice:Tengo dos arrays $com1 y $com2. De esos dos arrays creo uno nuevo ($coincidentes), con los datos en comunes de los otros dos arrays, de la siguiente forma: Código PHP: foreach (explode(",",$com1) as $k => $v){ foreach (explode(",",$com2) as $sk => $sv){ if ($v == $sv) array_push($coincidentes,$v); } } Supongamos que $com1 = 1,2,3,4,5,6,7,8,9,10; y $com2 = 1,2,3,4,5; por ende $coincidentes = 1,2,3,4,5;
(Hasta aquí todo bien)
Esos arrays lo que contienen son preguntas, entonces de esas preguntas tomo las respuestas de la base de datos, las respuestas pueden ser 0 o 1.
Entonces hago esto: Código PHP: $_coincidentes = implode(",",$coincidentes); $user = mysql_query("SELECT usuario,encuesta,respuesta FROM respuestas WHERE encuesta IN('$_coincidentes')"); $ver = mysql_fetch_array($user); Entonces... empiezo a comprar los resultados por ejemplo Código PHP: $comparar1 = $encuesta[1]."@".$respuesta[1]; $comparar2 = $encuesta[2]."@".$respuesta[2]; if($comparar1 == $comparar2) $comun = $comun + 1; Bueno, la verdad que ese código no funciona. Y esta es la función completa que estoy usando: Código PHP: function compararE($u1,$u2){ // CONSULTAS $us1 = mysql_fetch_array(mysql_query("SELECT contador,jugadas FROM usuarios WHERE id='$u1'")); $us2 = mysql_fetch_array(mysql_query("SELECT contador,jugadas FROM usuarios WHERE id='$u2'")); // CONTADORES $com1 = $us1[0]; $com2 = $us2[0]; // JUGADAS $jugadas1 = $us1[1]; $jugadas2 = $us2[1]; $coincidentes=array(); foreach (explode(",",$com1) as $k => $v){ foreach (explode(",",$com2) as $sk => $sv){ if ($v == $sv) array_push($coincidentes,$v); } } $_coincidentes = implode(",",$coincidentes); $user = mysql_query("SELECT usuario,encuesta,respuesta FROM respuestas WHERE encuesta IN('$_coincidentes')"); $ver = mysql_fetch_array($user); for ($i = 1; $i <= count($coincidentes); $i++) { $p=$p+1; $encuesta[$p] = $ver[1]; $respuesta[$p] = $ver[2]; if($p == 2){ $comparar1 = $encuesta[1]."@".$respuesta[1]; $comparar2 = $encuesta[2]."@".$respuesta[2]; if($comparar1 == $comparar2) $comun = $comun + 1; $p = 0; } } if($comun / $jugadas1 < $comun / $jugadas2) $div = $jugadas1; else $div = $jugadas2; $ret = $comun / $div; $ret = $ret * 100; return $ret; }
Espero su ayuda, y desde ya ¡Muchísimas gracias por su tiempo! |