Avatar billede superb Nybegynder
09. november 2008 - 22:57 Der er 7 kommentarer og
1 løsning

Slette tomt element i multidimensionalt array

Hvis jeg har et array på formen
$temp[] = array('id' => '12','navn' => 'etnavn');
$temp[] = array('id' => '','navn' => '');

Og gerne vil slette det tomme array hvis id er tomt, så har jeg lavet nedenstående, men det virker ikke, nogen der kan give mig et hint til hvad der er galt?
$i=0;
foreach($temp[$i]['id']) as $value {
  if (is_null($value)) {
    unset($temp[$i]);
    }
$i++
  }
Avatar billede micc Nybegynder
10. november 2008 - 00:00 #1
For det første har du en del syntaksfejl og for det andet så evaluerer is_null('') til false. Prøv med:

foreach ($temp as $key => $value)
{
if (empty($value['id'])) {
  unset($temp[$key]);
}
}
Avatar billede superb Nybegynder
10. november 2008 - 16:54 #2
tusind tak, smid et svar.
Lige for at være sikker på jeg har forstået det rigtig, så behøver jeg altså slet ikke give den den et nr i $temp[$i]['id'] når man sætter den som as $key => $value? så bliver den simpelthen automatisk sat?
Avatar billede superb Nybegynder
10. november 2008 - 17:12 #3
ups jeg har opdaget en fejl, jeg havde glemt det skulle være

$temp[] = array('id' => '12','navn' => 'etnavn');
$temp[] = array('id' => '','navn' => '');
$output[] = $temp;
altså inde i et array mere
Avatar billede superb Nybegynder
10. november 2008 - 17:15 #4
har fået lavet
foreach ($output as $key => $value)
{
if (empty($value[$i]['Store'])) {
  unset($output[$key]);
  $i++;
  }
}
der ser ud til at virke, er det korrekt måde at gøre det på?
Avatar billede micc Nybegynder
10. november 2008 - 19:29 #5
Indeholder $output kun ét array? Og hvorfor kommer 'Store' lige pludselig ind i billedet?
Avatar billede superb Nybegynder
10. november 2008 - 20:56 #6
store var fordi jeg fandt ud af jeg hellere ville have den til at tjekke efter en anden, $output indeholder alle $temp[] arrays.
Avatar billede micc Nybegynder
10. november 2008 - 22:25 #7
Så ville jeg nok bruge følgende:

foreach ($output as $key1 => $value)
{
foreach ($output[$key1] as $key2 => $value)
{
  if (empty($value['store'])) {
  unset($output[$key1][$key2]);
  }
}
}

Din metode virker fint nok når det kun udføres en gang og hvis $i ikke tilfældigvis allerede har fået en værdi fra en tidligere gennemløbet løkke, men hvis du vil have en mere fremtidssikret kode så er ovenstående en lidt bedre løsning (og afhængig af din php-version kan den nok sagtens optimeres).
Avatar billede superb Nybegynder
12. november 2008 - 12:04 #8
ok, mange tak
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