array vergelijken met uitkomsten van select
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)
1
2
3
4
5
6
7
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))
{
?>
$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.
Zie de manual page van mysql_query op php.net voor een voorbeeld.
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.
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:
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)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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) ;
}
}
}
?>
$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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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];
}
?>
$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_keys doet de klus, bedankt.
Nog ff wat extratjes toevoegen en het werkt zoals ik wil.
Super