[PHP] Array en bubblesort

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De search heb ik al gebruikt en daar heb ik al een sorteer routine uit gehaald maar de gegevens worden niet uit de array gelezen.

Ik heb deze functie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function sortLandenScoreLijst($array,$column) {
if( !empty($array) && is_array($array) ) {
 $n = count($array); 
 for($i=0; $i < $n; $i = $i + 2)  { 
  for($j=0; $j < $n - $i - 2; $j = $j + 2) { 
   $arr1 = $array[$j];
   $arr2 = $array[$j+2];
                
   $value1 = $arr1[0];
   $value2 = $arr2[0];
                
   if($value1 > $value2)  { 
    $tmp = $array[$j]; 
    $array[$j] = $array[$j+2]; 
    $array[$j+2] = $tmp; 
        
    $tmp = $array[$j+1]; 
    $array[$j+1] = $array[$j+3]; 
    $array[$j+3] = $tmp; 
    } 
  } 
 }
}
}


Mijn Array ziet er als volgt uit:

Array
(
    [Rusland] => Array
        (
            [0] => Rusland
            [1] => 6
            [2] => 0
            [3] => 31
        )

    [Griekenland] => Array
        (
            [0] => Griekenland
            [1] => 8
            [2] => 0
            [3] => 82
        )

    [Spanje] => Array
        (
            [0] => Spanje
            [1] => 9
            [2] => 0
            [3] => 168
        )

    [Portugal] => Array
        (
            [0] => Portugal
            [1] => 5
            [2] => 0
            [3] => 111
        )
}


De naam die in de sub-array staat moet er nog uit.
Maar ik wil graag sorteren op de punten aantallen die erin staan.

De fout die ik nu krijg is 'Undefined offset: x' op deze regel:
$arr1 = $array[$j];
alsof de array gewoon leeg is. Terwijl ik dat al check met het eerste if statement. En de array is niet leeg want voor die laat ik afdrukken voordat ik het sorteren aanroep.
Of is het niet mogelijk om middels de index nummering een array uit een array te halen en moet het dan op landnaam ?

Als iemand enig licht ziet. Bedankt.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
De varabele $j is een integer (getal), terwijl alle indexen strings zijn.

Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Je checkt niet met je eerste if of er indexen in de sort zelf verloren gaan of veranderen. :) Ik begrijp ook dat je bubblesort op elke 3e index in de array (dus [Portugal][3]) ? Waarom tel je steeds twee bij je loopiterators op?

Sundown Circus


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

waarom gebruik je geen usort() ?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ar = array( 'Rusland' => array( 'Rusland', 6, 0, 31 ),
             'Griekenland' => array( 'Griekenland', 8, 0, 82 ),
             'Spanje' => array( 'Spanje', 9, 0, 168 ),
             'Portugal' => array ( 'Portugal', 5, 0, 111 ) );

$sortindex = 1;
usort( $ar, 'compare' );

echo '<pre>'; print_r($ar); echo '</pre>';

function compare($a, $b) {

  global $sortindex;

  if ($a[$sortindex] == $b[$sortindex]) return 0;

  return $a[$sortindex] < $b[$sortindex] ? -1 : 1;

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

crisp schreef op 01 mei 2004 @ 11:56:
waarom gebruik je geen usort() ?
Een eigen implementatie van de bubblesort lijkt me leerzamer voor de TS. ;) En dan juist met name de loops, die je bij de usort niet hebt. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Mmmh.
Begrijp ik het goed dat je eigenlijk je hoofdarray wilt sorteren op waardes uit een subarray?
Dus sorteren op kolom twee (of zo) in de subarrays?
(Tenminste dat is wat ik begrijp uit jouw verhaal).
Kijk dan eens naar dit topic (en mijn reactie daarin)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

RedRose schreef op 01 mei 2004 @ 12:19:
[...]
Een eigen implementatie van de bubblesort lijkt me leerzamer voor de TS. ;) En dan juist met name de loops, die je bij de usort niet hebt. :)
Ik heb niet het idee dat dat de intentie van de topicstarter is aangezien deze aangeeft de routine gevonden te hebben en niet zelf geschreven heeft ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

crisp schreef op 01 mei 2004 @ 13:45:
[...]

Ik heb niet het idee dat dat de intentie van de topicstarter is aangezien deze aangeeft de routine gevonden te hebben en niet zelf geschreven heeft ;)
I rest my case. ;) Maar jou usort is ook een elegante oplossing. :)

Sundown Circus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 01 mei 2004 @ 13:45:
[...]

Ik heb niet het idee dat dat de intentie van de topicstarter is aangezien deze aangeeft de routine gevonden te hebben en niet zelf geschreven heeft ;)
Die heb ik idd niet zelf geschreven.
Eigenlijk had ik gehoopt dat het met functies van php zelf zou kunnen werken. Toen dat niet lukte ben ik gaan zoeken naar een aparte sorteer routine die ik hier op het forum gevonden heb met de search.

Ik ga de usort eens uitproberen.

[ Voor 4% gewijzigd door Verwijderd op 01-05-2004 16:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met usort wil het ook niet lukken de lijst wordt niet gesorteerd.
Misschien wordt de compare functie niet herkend omdat het in een object zit maar een foutmelding daarop krijg ik niet

Ik ga de array opbouw aanpassen en dan hopen dat een van de php compare functies goed werkt.
Pagina: 1