Avatar billede encorez Nybegynder
12. juni 2010 - 18:55 Der er 6 kommentarer og
1 løsning

Arrays - wrong datatype

Hej

Jeg får fejlen "Warning: array_search() [function.array-search]: Wrong datatype for second argument in" når jeg bruger både array_search() og in_array(), så noget gør jeg nok forkert men kan ikke se hvad.

Jeg har et array der indeholder flere arrays som:
$mainarray = array("dyr" => array('hund', 'hest'), "navne" => array('peter','hans'));

Mit hovedformål er at finde ud af om "hans" eksistere i arrayet "navne".
Så først hiver jeg det det rigtige array ud sådan
$mitarray = $mainarray['navne'];

Derefter bruger jeg in_array() til at teste om navnet er der:
if(in_array("jens", $mitarray))

og det er her jeg får fejlen hvor den siger at mit "second argument" er forkert datatype. Jeg formoder det betyder at $mitarray ikke er et korrekt Array.

Kan I hjælpe med hvad jeg gør galt? Jeg går næsten ud fra det er en lille ting der skal ændres for at typen er korrekt.
Avatar billede erikjacobsen Ekspert
12. juni 2010 - 18:59 #1
Det virker som udgangspunkt godt nok. Nedenstående udskriver "Ja", og hvis det er "Jens" vi leder efter, gør den ikke. Du må have noget mere kode.

<?php

$mainarray = array("dyr" => array('hund', 'hest'), "navne" => array('peter','hans'));
$mitarray = $mainarray['navne'];
if(in_array("hans", $mitarray)) {
  print "Ja";
}
?>
Avatar billede encorez Nybegynder
12. juni 2010 - 19:13 #2
Sådan opbygger jeg mainarray. For hvert slut-element der skal sættes ind. Flere typer sættes ind som arrays og flere elementer sættes ind i de arrays
$type kan være "dyr" eller "navne"
$element er så hund, hest eller jens, peter
$mainarray[$type][] = $element;

Mere kode er der faktisk ikke.

Og det underlige er at jeg kan printe $mitarray ud med print_r(), så  umiddelbart virker det fint som et array.
Men alligevel er som om in_array opfatter det anderledes.

Umiddelbart ser det dog ud til at min kode virker!!! Jeg får det rigtige resultat. MEN jeg vil meget gerne det til at virke UDEN disse fejl.
Skal jeg mon sætte/konvertere $mitarray til et array, så PHP opfatter det som et korrekt array?
Avatar billede erikjacobsen Ekspert
12. juni 2010 - 19:15 #3
Okay, men hvis der ikke er nogen indgang for den valgte type, så får du fejlen:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/..................php  on line 5

Fx fra denne kode:

<?php

$mainarray = array("dyr" => array('hund', 'hest'), "navne" => array('peter','hans'));
$mitarray = $mainarray['navne2'];
if(in_array("hans", $mitarray)) {
  print "Ja";
}
?>
Avatar billede erikjacobsen Ekspert
12. juni 2010 - 19:16 #4
Hovsa, og det kan løses ved at:

<?php

$mainarray = array("dyr" => array('hund', 'hest'), "navne" => array('peter','hans'));
$mitarray = $mainarray['navne2'];
if(is_array($mitarray) && in_array("hans", $mitarray)) {
  print "Ja";
}
?>
Avatar billede hmm10 Nybegynder
13. juni 2010 - 00:39 #5
<?
$mainarray = array("navne" => array('peter','hans'));
if (in_array('jens', (array)$mainarray['navne'])) {
  print_r("in array");
}
?>
Avatar billede encorez Nybegynder
14. juni 2010 - 07:49 #6
Hej

Jeg har ikke lige afprøvet dit sidste forslag men dit næst-sidste forslag virkede ikke.
Men det gav mig ideen til at spørge på OM det er et array FØR jeg spørger om elementet er i arrayet og det ser ud til at virke uden fejlene.

if(is_array($mitarray)){
  if(in_array("hans", $mitarray)){
    print "ja";
  }
}

Læg et svar for hjælpen
Avatar billede encorez Nybegynder
28. juli 2010 - 13:16 #7
Mit eget svar
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