
25/06/2011, 10:20
|
 | | | Fecha de Ingreso: enero-2009 Ubicación: Mar del Plata
Mensajes: 220
Antigüedad: 16 años, 2 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! |