array vergelijken met uitkomsten van select

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick G

patrick G

17/12/2006 12:01:00
Quote Anchor link
Het idee is als volgt, ik heb een array
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$a
=array(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);
?>


Deze array moet vergeleken worden met een select van een database en dat moet resulteren in een rij met actieve startletters(vet hyperlink) en inactieve startletters.

ongeveer zo,
A-<b>B</b>-C-D-enz

dit werkt dus niet,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$alfabet_SQL
= "SELECT band FROM vinyl " ;
$hitresult = mysql_query($alfabet_SQL);

foreach($a as substr(hitresult,1,1))
{

?>

Iemand een idee ?
Ik zit al een tijdje te zoeken maar vindt niet iets waarmee ik vooruit kom.
 
PHP hulp

PHP hulp

19/11/2024 09:47:29
 
Willem vp

Willem vp

17/12/2006 12:15:00
Quote Anchor link
mysql_query() geeft geen resultaten terug maar een resource. Op die resource kun/moet je vervolgens je data ophalen met bijvoorbeeld mysql_fetch_array().

Zie de manual page van mysql_query op php.net voor een voorbeeld.
 
Patrick G

patrick G

17/12/2006 12:22:00
Quote Anchor link
Ja, dat had ik ook al geprobeerd.
maar :
</php
$alfabet_SQL = "SELECT band FROM vinyl " ;
$hitresult = mysql_query($alfabet_SQL);
while ($raak = mysql_fetch_array($hitresult)){

foreach($a as substr($hitresult,1,1))
{
echo $a ;
}
}
?>
geeft de foutmelding:
Cant use function return value in write context in bestandsnaam.
 
Willem vp

Willem vp

17/12/2006 13:12:00
Quote Anchor link
Je gebruikt $hitresult als parameter van substr() en dat gaat niet werken, omdat $hitresult geen string is, maar een resource (zie mijn vorige mail). Waarschijnlijk wil je hier iets doen met $raak.

Bovendien is je foreach-syntax niet correct, en dat is ook de reden dat je de foutmelding krijgt.

Na de 'as' in je foreach() moet een left-hand value komen; iets waar je een waarde aan toe kunt kennen. Jij gebruikt een right-hand value; iets waar je geen waarde aan kunt toekennen.

Je zou dus iets moeten doen als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
foreach ($a as $key)
{

   if (substr($raak, 0, 1) == $key)
   {

      echo $key;
   }
}

?>

Let op dat het eerste karakter van een string index 0 heeft, en niet index 1.

Verder kun je je array $a gemakkelijker vullen:

$a = range('A', 'Z');

Bovendien ga je er hierbij vanuit dat je string altijd met een hoofdletter begint. Als dat niet het geval is, zul je een case-insensitive vergelijking moeten doen, dus bijvoorbeeld:

if (strtoupper(substr($raak, 0, 1)) == $key)
 
Patrick G

patrick G

17/12/2006 13:33:00
Quote Anchor link
Ik heb nu dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$alfabet_SQL
= "SELECT band FROM vinyl " ;
$hitresult = mysql_query($alfabet_SQL);
while ($raak = mysql_fetch_array($hitresult)){
foreach ($a as $key)
{

 if(substr($raak['band'],0,1)== $key )
{

    echo substr($raak['band'],0,1) ;
}
}
}

?>


Dat geeft echter geen hits, als ik $key in de if clausule vervang voor bv de letter 'A' , dan krijg ik wel hits, maar dan 2 keer zoveel als er aanwezig zijn.
Ook de foreach voor de select zetten helpt niet.
 
Willem vp

Willem vp

17/12/2006 13:55:00
Quote Anchor link
Misschien is het handiger om e.e.a. via de andere kant aan te pakken, dus eerst je query-resultaten bekijken en bijhouden welke letters worden gebruikt. Je krijgt dan ongeveer zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$cnt_a
= array_fill_keys($a, 0);
while ($raak = mysql_fetch_array(bla))
{

   $letter = strtoupper(substr($raak['band'], 0, 1));
   $cnt_a[$letter]++;
}

foreach ($a as $key)
{

   if ($cnt_a[$key] > 0) echo $key, $cnt_a[$key];
}

?>

Je houdt op deze manier meteen bij hoe vaak een letter voorkomt.
 
Patrick G

patrick G

17/12/2006 14:34:00
Quote Anchor link
array_fill_keys bestaat niet.

array_keys doet de klus, bedankt.

Nog ff wat extratjes toevoegen en het werkt zoals ik wil.

Super
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.