[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] PHP: ændre rækkefølgen på et associativt array



"Michael Rasmussen" <sslug@sslug> writes:

>> Helt konkret vil jeg kunne pege på en nøgle og sige 'du skal være
>> tilsidst'. Og jeg kan ikke se andre måder at ændre rækkefølgen på end
>> med sorteringsfunktionerne.
>> 
> Du har ingen mulighed for at bestemme placering af et element, da
> placeringen bestemmes af hash funktionen.

Ikke det. Følgende kode flytter elelrs rundt på placeringen af
$arr['baz'] på min maskine:

<?php

$arr = Array( 'foo' => 'metasyntaktisk variabel nummer 1',
              'bar' => 'metasyntaktisk variabel nummer 2',
              'baz' => 'metasyntaktisk variabel nummer 3',
              'foobar' => 'metasyntaktisk variabel nummer 4',
              'foobaz' => 'metasyntaktisk variabel nummer 5',
              'xyzzy' => 'metasyntaktisk variabel nummer 6',
              'plugh' => 'metasyntaktisk variabel nummer 7',
            );

// Skriv ud:
print "Array før vi gør noget ved det:\n";
foreach ($arr as $key => $val) {
        print "$key\t$val\n";
}

// Flyt baz om til sidst:
$i=0;
foreach ($arr as $key => $val) {
        $tmp[$key] = $i++;
}
$tmp['baz'] = 9;
function cmp($a,$b) {
        global $tmp;
        if ($tmp[$a] < $tmp[$b]) {
                return -1;
        } elseif ($tmp[$a] > $tmp[$b]) {
                return 1;
        } else{ 
                return 0;
        }
}
uksort($arr,"cmp");

// Skriv ud:
print "Array efter vi gør noget ved det:\n";
foreach ($arr as $key => $val) {
        print "$key\t$val\n";
}

?>

Men den anvender netop et hack med *sort.

> Er du sikkert på, at du ikke blot skal anvende et almindeligt array? Det
> du efterspørger, er fundamentalt i modstring med hash arrays - selv ikke i
> Perl har du denne mulighed:-)

Nej for perl skelner korrekt mellem associative arrays og
arrays/lister. Derfor giver det slet ikke mening at sorterer
associative arrays i perl hvor idiomet er at lave en liste af
nøglerne, sortere listen og så itererer over den.

Men i PHP er idiomet altså at sortere det associative array, hvorfor
der selvfølgelig er en underliggende ordning som jeg kan ændre på. Det
er bare ikke nemt hvis jeg skal gøre det med noget kode ala det
ovenstående.

//Peter


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2006-11-01, 02:01 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *