op alfabeth zoeken in een array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chieljan sportel

chieljan sportel

11/01/2009 20:56:00
Quote Anchor link
ik heb dit script gemaakt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

$artiest
= ucwords(strtolower($artiest));
$artiesten = preg_split('#(\ (vs|feat|featuring|versus)\.?\ )#ix',$artiest);

sort($artiesten);
$artiesten = array_unique($artiesten);
$artiest_count = count($artiesten);
$i=0;
foreach($artiesten AS $artiest) {
    
    //Geeft bij elke nieuw artiest een enter.
    
    If($i <= $artiest_count-2) {
        $show_artiesten .="".$artiest."<br>";
    }
Else {
        $show_artiesten .="".$artiest."";
    }

    $i++;
}

unset($i,$artiest_count);


echo "$show_artiesten";

?>


En ik wil er dus voor zorgen dat ik dan alleen alle arrays of strings krijg te zien de beginnen met een A, B, C enzovoorts ;) is hier een oplossing voor?
 
PHP hulp

PHP hulp

21/12/2024 08:59:23
 
Yorick17

yorick17

11/01/2009 21:10:00
Quote Anchor link
Wat je nu bedoelt is mij niet duidelijk
 
Hipska BE

Hipska BE

11/01/2009 21:15:00
Quote Anchor link
if(substr($string,0,1) == 'A'){ // begint met A

trouwens bij je preg_split niet vergeten nog andere dingen toe te voegen. ft wordt ook nog vaak gebruikt als koopelwoord van artiesten.
 
Chieljan sportel

chieljan sportel

11/01/2009 21:15:00
Quote Anchor link
nou alle artiesten worden weergegeven met dit script

door $show_artiesten

Dus bijvoorbeeld

Dj Duro
The Prophet
Alfatwins
Brennan heart

maar ik wil er dus voor zorgen dat ik alleen de artiesten met een A, B, C enz te zien krijg ;)

Gewoon met een indexering dus ;)
 
Chieljan sportel

chieljan sportel

11/01/2009 21:22:00
Quote Anchor link
@ hipska

Hoe zou de code moeten worden dan??


Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door chieljan sportel
 
Nicoow Unknown

Nicoow Unknown

11/01/2009 22:20:00
Quote Anchor link
Je kan je array gaan doorlopen en dan voor ieder letter appart,.
pseudo code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
for(i = 0; i < 26 - 1; i++)
  array a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p
  for(j = 0; j < artiesten.length; j++)
    if(substr(artiesten(j),0,1) == 'array.i')
      echo artiesten.j

In die richting moet je het maar een beetje zoeken, en de functie namen zijn niet helemaal php, maar dat red je zelf denk ik wel
 
Joren de Wit

Joren de Wit

11/01/2009 22:34:00
Quote Anchor link
Dit is precies een voorbeeld waarom je in je vorige topic aangeraden wordt om je database aan te pakken en te zorgen voor een correct datamodel. Dan had je namelijk met 1 simpele query klaar geweest:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT naam
FROM artiesten
ORDER BY naam ASC

Dat had je alle artiesten op alfabetische volgorde gegeven en je had zo een nette lijst met indexen kunnen maken.

Maar helaas heb je besloten om alles in PHP te gaan doen, dus zul je het op de volgende manier moeten aanpakken:

- Verschillende artiesten dmv preg_split() in een array zetten. (Doe je al)
- Waarden in de array sorteren met een van de sort functies.
- Array doorlopen en bijhouden wat de eerste letter van de artiest is.
- Afhankelijk van de eerste letter een nieuwe index tonen. (Als deze verschilt van de eerste letter van de vorige artiest)

Maar goed, er zullen waarschijnlijk wel een aantal haken en ogen aan dit systeem zitten. Om maar te beginnen met het voorbeeld dat Hipska al noemt: de reguliere expressie in jouw preg_split is bij lange na niet generiek genoeg. Er zijn nog veel meer mogelijke manieren waarop verschillende artiesten in 1 regel voorkomen.
 
Chieljan sportel

chieljan sportel

12/01/2009 13:28:00
Quote Anchor link
nico schreef op 11.01.2009 22:20:
Je kan je array gaan doorlopen en dan voor ieder letter appart,.
pseudo code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
for(i = 0; i < 26 - 1; i++)
  array a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p
  for(j = 0; j < artiesten.length; j++)
    if(substr(artiesten(j),0,1) == 'array.i')
      echo artiesten.j

In die richting moet je het maar een beetje zoeken, en de functie namen zijn niet helemaal php, maar dat red je zelf denk ik wel


Ik snap je niet helemaal waar zou dit in de code moeten komen?? en hoe moet ik nu een letter selecteren??
 
Joren de Wit

Joren de Wit

12/01/2009 13:46:00
Quote Anchor link
Dat is geen PHP code, dus dat kun je zoals nico ook al zegt, niet letterlijk overnemen!

Als je echt van plan bent om het in PHP op te lossen: zie het stappenplan uit mijn vorige post...
 
Chieljan sportel

chieljan sportel

12/01/2009 14:08:00
Quote Anchor link
ja maar hoe doe ik dat?? hoe kan ik bepalen wat de eerste letter van de artiest is en hoe haal ik daar weer een nieuwe index uit? en ik snap niet wat je bedoelt met sort want hij sorteert alles al op alfabetische volgorde ;)
 
Joren de Wit

Joren de Wit

12/01/2009 14:16:00
Quote Anchor link
chieljan schreef op 12.01.2009 14:08:
en ik snap niet wat je bedoelt met sort want hij sorteert alles al op alfabetische volgorde ;)
Dit noem ik niet bepaald alfabetisch:
Quote:
Dj Duro
The Prophet
Alfatwins
Brennan heart

Je zult de waarden in de array $artiesten dus eerst nog moeten sorteren met behulp van sort.

Als je dat gedaan hebt is het een kwestie van uitlezen van die array en zoals ik zei bijhouden bij welke index je bent:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$prevIndex
= '';

foreach($artiesten as $artiest)
{

    // Eerste letter in $artiest[0]
    if($artiest[0] != $prevIndex)
    {

        echo '<b>'.$artiest[0].'</b><br />';
        $prevIndex = $artiest[0];
    }

    
    // Artiest weergeven
    echo $artiest.'<br />';
}

?>
 
Chieljan sportel

chieljan sportel

12/01/2009 14:23:00
Quote Anchor link
oké nu heb ik dat ik dus een letter te zien krijg met daaronder de naam ;)

Maar hoe krijg ik nu alleen de arrays/strings te zien die beginnen met een A??
 
Joren de Wit

Joren de Wit

12/01/2009 14:26:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(strtolower($artiest[0]) == 'a')
{

    // $artiest begint met een A
}
?>

Maar dit is wel echt de basis van PHP. Als je dit nog niet beheerst, zou ik je aanraden om deze PHP beginnershandleiding door te nemen en eerst te zorgen dat je dat onder de knie krijgt.

Zonder die basis zal het vrij lastig worden om dit soort scriptjes te maken...
 
Chieljan sportel

chieljan sportel

12/01/2009 14:32:00
Quote Anchor link
Ja grapje wist ik wel srry ;)

Maar het werkt dus manny thanx ;)
Ik heb echt zeer veel aan deze site :D
 
Hipska BE

Hipska BE

12/01/2009 14:58:00
Quote Anchor link
He zeg,

Waarom doe ik nog moeite?

ik gaf op 11.01.2009 21:15 al een manier om de eerste letter te bepalen..

Als je niet wil dat ik help zeg je het maar, dan verspil ik ook niet mijn tijd..

en @Blanche: Die strtolower hoeft niet, want de eerste regel in zijn script zorgt ervoor deat de eerste letter van een artiest altijd een hoofdletter is.
Gewijzigd op 01/01/1970 01:00:00 door Hipska BE
 
Joren de Wit

Joren de Wit

12/01/2009 15:14:00
Quote Anchor link
Hipska schreef op 12.01.2009 14:58:
en @Blanche: Die strtolower hoeft niet, want de eerste regel in zijn script zorgt ervoor deat de eerste letter van een artiest altijd een hoofdletter is.
Ik zie het. Overbodig dus :-)
 
Chieljan sportel

chieljan sportel

12/01/2009 15:14:00
Quote Anchor link
Srry hipska maar ik plaatste die code buiten de foreach dus dan kreeg ik als nog alle artiesten te zien!! is een foutje van mij!!! maar jij ook bedankt ;)
Echt fijn als mensen je willen helpen ;)
 



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.