[php] sorteren

Pagina: 1
Acties:

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
Ik wil de inhoud van een textfile sorteren.
nu doe ik dit:
PHP:
1
2
3
4
<?
$filearray = file("../file.txt");
sort($filearray);
?>


en dat werkt op zich wel, maar dan gooit hij regels die met een umlaut beginnen onderaan.. en die wil ik er dus gewoon tussen hebben staan..
iemand een id?

edit:
hij moet dus eigenlijk een ä zien als een a ..hmm.. geef ik hier het antwoord zelf al?:P

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
ok .. toch graag hulp..kom er toch niet echt uit..

  • ViTEL
  • Registratie: September 2001
  • Niet online

ViTEL

ToPGuN

Neem eens een kijkje naar de functie http://www.php.net/manual/en/function.usort.php

En de comparisonfunctie zul je dan ben ik bang toch echt zelf moeten gaan verzinnen mbv bijvoorbeeld de ASCII code van een character.

Maar ik loop 11.1 op de 100...


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Of je zet eerst al die 'vage' tekens om naar normale tekens en dan een sort.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
Op donderdag 10 januari 2002 15:46 schreef jelmervos het volgende:
Of je zet eerst al die 'vage' tekens om naar normale tekens en dan een sort.
dit gaat natuurlijk niet werken.. want ik kan inderdaad wel de umlauts naar de normale omzetten dan sorteren .. maar dan moeten ze dus eigenlijk weer terug......

  • tomato
  • Registratie: November 1999
  • Niet online
nikao: dit gaat natuurlijk niet werken.. want ik kan inderdaad wel de umlauts naar de normale omzetten dan sorteren .. maar dan moeten ze dus eigenlijk weer terug......
Dan doe je dat toch in je compare functie? Ik zeg niet dat dit de snelste/makkelijkste/beste methode is, maar het kan zeker wel...

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
Op donderdag 10 januari 2002 15:45 schreef ViTEL het volgende:
Neem eens een kijkje naar de functie http://www.php.net/manual/en/function.usort.php

En de comparisonfunctie zul je dan ben ik bang toch echt zelf moeten gaan verzinnen mbv bijvoorbeeld de ASCII code van een character.
ja .. hier was ik al bang voor... geen id hoe ik dat ga aanpakken...maar goed.. ik zal er es ff mijn hoofd over breken :P..

(bestaat dit trouwens wellicht niet al?.. ik bedoel .. het is toch niet wenselijk dat als je iets sorteert de umlauts na de z komen.?)

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
of eerst de array doorlopen en die tekens eruit filteren?
http://www.php.net/manual/en/function.preg-replace.php

www.dannyhiemstra.nl


  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
dus bv
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
$file = file("text.txt");

$haalditweg = array("&amp;auml;'i");
$vervangdoor = array("");

while(list($line_num,$line) = each($file))
{
   $line = preg_replace($haalditweg,$vervangdoor,$line);
}
?>

niet getest natuurlijk

www.dannyhiemstra.nl


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
ok.. nu had ik (nou jah.. eigenlijk flatgenoot:p) het volgende bedacht:

vervang de A umlaut door een A .. en zet er <umlaut> achter.

sorteer

vervang waar <umlaut> achter het woord staat de A weer voor een A umlaut.

dit mbh substr_count.
maar nu werkt blijkbaar substr_count niet met umlauts?

ik doe namelijk het volgende (functie erbij omdat dit in php3 moest)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
    function substr_count($haystack, $needle, $offset = 0)    {
    $i = 0;
    $count = 0;
    while ($i==0)    {
        $longueur = strlen($haystack);
        $position = strpos($haystack, $needle, $offset);
        if ($position &amp;amp;&amp;amp; ($offset + strlen($needle)) < $longueur)    {
            $offset = $position+strlen($needle);
            $count++;
        } else    {
        $i++;
        }
        
    }
    return $count;

    }
    
    echo substr_count("Ägypten","Ä");
?>

en hier echo'ed hij dus een 0 .. terwijl als je
PHP:
1
2
3
<?
echo substr_count("Ägypten","g");
?>


doet hij wel netjes 1 teruggeeft..

iemand een oplossing hiervoor?
edit:
ok .. niet vergenoeg doorgelezen.. deze functie werkt dus niet als $haystack begint met $needle
iemand die wel een goeie substr_count functie weet?

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
heb het nu opgelost door overal eerst .. voor te zetten .. en dat later weer weg te halen..
maar ben toch benieuwd of er geen betere substr_count functie is.. dis natuurlijk een niet al te lekker oplossing...

  • chuxiej
  • Registratie: Februari 2001
  • Laatst online: 13-07-2020
doe nou maar gewoon zoals ik het zei ;)

www.dannyhiemstra.nl


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
uhm.. nee.. jij haalt die letter helemaal weg toch?..dat lijkt me niet handig. want dan klopt van de volgorde helemaal nix meer

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
je zou het ook kunnen doen met array_multisort: je maakt een kopie van je array waarbij de umlauts vervangen zijn door u's, en vervolgens sorteer je daarop:
code:
1
array_multisort($kopie, $filearray);

$filearray wordt dan automatich meegesorteerd.

ik weet niet hoe de snelheid is t.o.v. andere methodes, maar het lijkt me minder omslachtig.

[edit]
je moet ook nog wat flags opgeven voor het sorteren. moet je ff op die pagina kijken.

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
$file = file("text.txt");

$haalditweg = array("&amp;auml;'i");
$vervangdoor = array("á");

while(list($line_num,$line) = each($file))
{
   $line = preg_replace($haalditweg,$vervangdoor,$line);
}
?>
Pagina: 1