Avatar billede michaeltryl Seniormester
31. oktober 2007 - 19:50 Der er 7 kommentarer og
1 løsning

Tælle udfyldte felter i et array

Jeg har en form som udskrives sådan
$svar = $svar + 1;           
$i = 1;
while($i < $svar)
{
echo"<tr><td>Svar $i:</td><td><input type='text' name='svar[]' size='50' maxlength='255'></td></tr>";
    $i++;
}

herefter skal det indsættes i databsen, og her gør jeg sådan

if ( is_array($_POST['svar']) && count( $_POST['svar'] ) > 2)
{
      echo count($_POST['svar'] );
foreach ($_POST['svar'] as $svarvalg)
{

$svarvalg = mysql_real_escape_string($svarvalg);
echo"$svarvalg<br>";
}
problemet er at count( $_POST['svar'] ) tæller alle felter i arrayet, men jeg ønsker kun at tælle de udfyldte felter, da der minimum skal være to udfyldte felter.
jeg har prøvet med count( !empty ($_POST['svar']) ), uden held
er der en som har et bud på hvordan jeg kan gøre dette?
Avatar billede jakobdo Ekspert
31. oktober 2007 - 19:56 #1
Prøv lige at lav:

echo '<pre>';
print_r($_POST);
echo '</pre>';
Avatar billede michaeltryl Seniormester
31. oktober 2007 - 20:02 #2
så får jeg denne udskrift, hvis jeg skriver "test" i det første felt
Array
(
    [svar] => Array
        (
            [0] => test
            [1] =>
            [2] =>
            [3] =>
            [4] =>
        )

)
Avatar billede jakobdo Ekspert
31. oktober 2007 - 20:13 #3
$ok = 0;
$not = 0;

for($i = 0; $i < count($_POST['svar']); $i++)
{
if(isset($_POST['svar'][$i]) && !empty($_POST['svar'][$i]))
{
$ok++;
}
else
{
$not++;
}
}
echo 'OK : ' . $ok . '<br />';
echo '!OK : ' . $not . '<br />';
Avatar billede michaeltryl Seniormester
31. oktober 2007 - 20:28 #4
okay så jeg skal køre det hele igennem først før jeg skal indsætte i databsen.
havde håbet der var en funktion som kunne tælle det inden.
Det du har lavet virker perfekt, så mange tak for hjælpen. Smid et svar så får du point
Avatar billede terrak Nybegynder
31. oktober 2007 - 20:29 #5
Alternativt kan du lave en funktion, der fjerne tomme værdier fra arrayet:

function array_remove_empty_values(&$array, $preservekey = 1) {

foreach ($array as $key => $value) {

if (!empty($value)) {
  if ($preservekey == 1) {
  $newarray[$key] = $value;
  } else {
  $newarray[] = $value;
  }
}

}
$array = $newarray;
}

Så siger du bare
array_remove_empty_values($_POST['svar']);
Skal index-tallet tildeles forfra, sender du et ekstra argument med:
array_remove_empty_values($_POST['svar'],0);
Avatar billede jakobdo Ekspert
31. oktober 2007 - 20:48 #6
Du får et svar.
Du kunne også kigge på funktionen: array_count_values()
Avatar billede michaeltryl Seniormester
31. oktober 2007 - 21:21 #7
okay det vil jeg gøre engagang ved lejlighed
Avatar billede jakobdo Ekspert
31. oktober 2007 - 21:32 #8
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester