Het idee is als volgt, ik heb een array
<?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,
<?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.
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.
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.

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:

<?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)
Ik heb nu dit:
<?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.

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:
<?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.
array_fill_keys bestaat niet.

array_keys doet de klus, bedankt.

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

Super

Reageren