Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Preciso de um help.
Estou fazendo um quiz em php,com opções A, B, C, D, E, F.
Depois que a pessoa seleciona as respostas, ele cria um array do resultado.
Preciso saber quais foram mais respondidas para dar resposta.
Ex: mais A, B..
Como eu faço?
Obrigada :)
Obrigada Carlos!
Estou pedindo para que conforme mais respostas A ele publique uma determinada página, mas está dando erro :(
$soma = array(($_SESSION['radio1']), ($_SESSION['radio2']), ($_SESSION['radio3']), ($_SESSION['radio4']));
print_r(array_count_values($soma));
$a = 'a';
$b = 'b';
$c = 'c';
$d = 'd';
$e = 'e';
$f = 'f';
if ($soma < $a)
echo 'classica';
elseif ($soma < $B)
echo 'boho';
elseif ($soma < $c)
echo 'minimalista';
elseif ($soma < $d)
echo 'moderninha';
elseif ($soma < $e)
echo 'fashionista';
elseif ($soma < $f)
echo 'glam';
?>
como eu faço isso? rs..
já consegui pegar maior valor com
echo max($soma);
agora só preciso criar as condições... :)
Você poderia simplificar seu script trabalhando com outro array para os perfis.
Veja:
<?php
$respostas = array( 'A', 'B', 'D', 'A', 'C', 'F', 'F', 'B', 'E', 'A' );
$perfil = array(
'A' => 'Classica',
'B' => 'Boho',
'C' => 'Minimalista',
'D' => 'Moderninha',
'E' => 'Fashionista',
'F' => 'Glam'
);
$resposta = array_count_values( $respostas );
arsort( $resposta );
echo $perfil[ key( array_slice( $resposta, 0, 1 ) ) ];
?>problema que se der empate, vou realizar outra pergunta para desempate apenas com as opções empatadas..
isso que está dando nó na minha cabeça!
Obrigada, está me ajudando muito!!!!!
:grin:
Bom, basta verificar quantas respostas possuem o mesmo número.
<?php
$respostas = array( 'A', 'B', 'D', 'A', 'C', 'F', 'F', 'B', 'E', 'A', 'F' );
$perfil = array(
'A' => 'Classica',
'B' => 'Boho',
'C' => 'Minimalista',
'D' => 'Moderninha',
'E' => 'Fashionista',
'F' => 'Glam'
);
$resposta = array_count_values( $respostas );
$max = max( $resposta );
$result = null;
array_walk(
$resposta,
function( $value, $key ) use ( $max, &$result )
{
if( $value == $max )
{
$result[ ] = $key;
}
}
);
if( count( $result ) > 1 )
{
// array com as opções que possuem o mesmo valor
var_dump( $result );
} echo $perfil[ reset( $result ) ];
}
?>Carlos,
Criei array, mas não to conseguindo que ele "pegue" resultado correspondente. O que eu fiz:
if( count( $result ) > 1 )
{
// array com as opções que possuem o mesmo valor
$desempate = array(
'ab' => 'desempate a e b',
'ac' => 'desempate a e c',
'ad' => 'desempate a e d',
'ae' => 'desempate a e e',
'af' => 'desempate a e f',
'bc' => 'desempate b e c',
'bd' => 'desempate b e d',
'be' => 'desempate b e e',
'bf' => 'desempate b e f',
'cd' => 'desempate c e d',
'ce' => 'desempate c e e',
'cf' => 'desempate c e f',
'de' => 'desempate d e e',
'df' => 'desempate d e f',
'fe' => 'desempate f e e'
);
$teste = join("",$result);
echo ($teste);
} echo $perfil[ key( array_slice( $resposta, 0, 1 ) ) ];
}
?>
Eu fiz join para ele juntar as opções por exemplo empate de a e b. Ele dá bonitinho o resultado, mas na hora de interpretar com qual resposta, ferra tudo.
Obrigada de novo!! :)
tive uma idéia e tô quase conseguindo, rs!
olha só:
if( count( $result ) > 1 )
{
// array com as opções que possuem o mesmo valor
sort($result);
$teste = join("",$result);
echo ('http://www.gabitardivo.com/app/empate'.$teste.'.php');
} echo $perfil[ key( array_slice( $resposta, 0, 1 ) ) ];
}
agora só preciso que no echo ele redirecione para a página. \o/
Simples :rolleyes:
Mude:
$teste = join("",$result);
echo ($teste);
Para:
echo $desempate[ strtolower( implode( null, $result ) ) ];
:thumbsup:Vou ficar doida, sério! rs..
Meu chefe resolveu mudar..
Colocou peso nas questões e agora desempate são por 3 questões.. não da pra criar uma página para cada possivel resposta, vai ficar gigaaaaaaaante.
Tem como puxar apenas as perguntas específicas para um arquivo final?
Pensei em criar um array com include mas não sei se isso existe e é possível.
$desempate = array(
'a' => 'include (respA.php);',
'b' => 'include (respB.php);',
'c' => 'include (respC.php);',
'd' => 'include (respD.php);',
'e' => 'include (respE.php);',
'f' => 'include (respF.php);'
);
echo ( página correspondente );
perdida de novo..
Obrigada :)
resolvi!
Eu criei uma session para resultado
if( count( $result ) > 1 )
{
// array com as opções que possuem o mesmo valor
sort($result);
$_SESSION['result'] = $result;
echo '<meta http-equiv="refresh" content="0;url=http://localhost/app/resultado.php">';
} echo $perfil[ key( array_slice( $resposta, 0, 1 ) ) ];
}
?>
e na página resultado, puxei os resultados do array.
<?php
session_start();
$gabi = $_SESSION['result'];
var_dump($gabi);
include('Resp'.$gabi[0].'.php');
include('Resp'.$gabi[1].'.php');
?>
Obrigada Carlos, você me ajudou muito!
Que bom que conseguiu :grin:
Mais uma dica, prefira utilizar header para dar um refresh na página.
header( 'refresh:0; url="http://localhost/app/resultado.php"' );
:thumbsup:No localhost ele roda direitinho.. quando subi no servidor está dando erro.
Parse error: syntax error, unexpected T_FUNCTION in /home/gabinerds/gabitardivo.com/app/soma.php on line 24
não estou achando erro de jeito nenhum :(
o que pode ser?
:seta: array_count_values
:thumbsup: