[PHP] Sorteer functie van een dubbele array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb al het een en ander opgezocht, maar helaas niet kunnen vinden, omdat ik eigelijk niet weet hoe ik het het beste kan aanpakken . . .

Ik heb 2 arrays:
$Klant_ID[$i]
$Klant_Naam[$i]

Nu wil ik ze gaan sorteren op alfabetische volgorde van $Klant_Naam
maar $Klant_ID moet daarin mee veranderen in de juiste volgorde. . .

dit is bijvoorbeeld de input:
code:
1
2
3
<OPTION VALUE='467'>Hansje Pansje Gansje(467)</OPTION>
<OPTION VALUE='129'>Zwamdidam(129)</OPTION>
<OPTION VALUE='271'>Blaat (271)</OPTION>


En het zou het volgende moeten worden:
code:
1
2
3
<OPTION VALUE='271'>Blaat (271)</OPTION>
<OPTION VALUE='467'>Hansje Pansje Gansje(467)</OPTION>
<OPTION VALUE='129'>Zwamdidam(129)</OPTION>


Wat zou hier voor de juiste oplossing zijn?
op php.net heb ik wel de functie arsort gevonden, maar ik kan niet echt zeggen dat ik daar wijs uit wordt, het komt mij nogal onduidelijk over, en ik durf dus echt niet te zeggen of ik daar eigelijk mee zou kunnen berijken wat ik wil. . .

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Mmm, ik denk dat je model niet helemaal handig is, waarom heb je niet een array die er als volgt uitziet:
$klant_ID[467]['naam']='Hansje Pansje Gansje';

Dan kun je de $klant_ID array evt als volgt sorteren:

PHP:
1
2
3
4
5
6
7
8
function aasort($x,$var,$cmp='strcmp'){ 
    if ( is_string($var) ) $var = "'$var'"; 
    uasort($x,create_function('$a,$b', 'return '.$cmp.'( $a['.$var.'],$b['.$var.']);')); 
    return $x; 
} 


$sorted_array=aasort($klant_ID,'naam');


de derde parameter van de functie kun je ook gebruiken, dat is de functienaam die de vergelijking doet tussen twee waarden, in dit geval default 'strcmp' de php functie om twee strings te vergelijken (case sensitive) maar je kunt ook bijv. 'strcasecmp' gebruiken voor een case-insensitive vergelijking.

[ Voor 11% gewijzigd door beetle71 op 17-10-2003 12:11 ]


Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Ben ik nou gek of wil je gewoon asort hebben? :?

Asort = associative sort, dus behoud van associativiteit. Lijkt me precies wat je nodig hebt. Je verschillende arrays worden dus met behoud van gelijke index gesorteerd:
stel je hebt
PHP:
1
2
3
4
5
6
7
8
$klant_id[] = "100" ;
$klant_naam[] = "Arie" ;

$klant_id[] = "88" ;
$klant_naam[] = "Zacharias" ;

asort($klant_id) ;
reset($klant_id) ;

En dan ga je loopen over $klant_id (+printen van $klant_naam) dan krijg je eerst:
88 - Aacharias
100 - Arie

Zoiets?

[ Voor 12% gewijzigd door Cavorka op 17-10-2003 12:20 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
@Cavorka: typfoutje: $klant_naam[] = "Zacharias" ; moet natuurlijk $klant_naam[] = "Aacharias" ; zijn ;)

[ Voor 32% gewijzigd door r0bert op 17-10-2003 12:23 ]


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Cavorka schreef op 17 oktober 2003 @ 12:19:
Ben ik nou gek of wil je gewoon asort hebben? :?
* beetle71 denkt niet dat Cavorka gek is :)

Je moet alleen even over de naam array 'asort'-en en niet over de id array :P

Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

@r0bert: Dat hangt ervan af... het gaat er juist om dat de ID's nog niet gelijk lopen met de namen, dat het dus nog niet alfabetisch staat, of op ID staat. Dat wilde ik zo laten zien, was expres dus gecrossed (lagere id met latere beginletter & vice versa).

@beetle71: Dat hangt ervan af wat je wilt! :D
Hmz, ik ben inderdaad een beetje sgeef, sorteren op $Klant_naam dus! You're right.

[ Voor 37% gewijzigd door Cavorka op 17-10-2003 12:32 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Tipje:

Pleur je namen en id in dezelfde array:

Dan wordt het dus ongeveer zo:

PHP:
1
2
3
4
5
6
$klant[0]['naam'] = 'pietje';
$klant[0]['id'] = 1;
$klant[1]['naam'] = 'jantje';
$klant[1]['id'] = 2;
$klant[2]['naam'] = 'koos';
$klant[2]['id'] = 80;

dan gebruik je deze functie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function array_csort($marray, $column) 
{
    if (!empty($marray))
    {
        foreach ($marray as $row) 
        {
            $sortarr[] = strtolower($row[$column]);
        }
        array_multisort($sortarr, $marray);
    }
    return $marray;
}


als je dan

PHP:
1
array_csort($klant, 'naam');


doet, krijg je je array terug gesorteerd op naam :)

[ Voor 12% gewijzigd door SchizoDuckie op 17-10-2003 13:11 ]

Stop uploading passwords to Github!

Pagina: 1