[PHP] array_multisort en bv Duitse taal

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:09
Stel deze array, en de Duitse taal:

PHP:
1
2
3
4
5
6
7
$arr = array(
                'Alex',
                'Äi',
                'Oksel',
                'Österreich',
                'Zimbambwe'
            );


Als je dan een array_multisort doet

PHP:
1
array_multisort($arr, SORT_ASC);


Krijg je Alex, Oksel, Zimbabwe, Äi, Österreich

Opzich logisch, maar je kan in multisort geen collation meegeven.

Hoe ga ik de boel nu sorteren zodat het: Äi, Alex, Oksel, Österreich, Zimbabwe wordt?

Een mogelijke workaround zou zijn om bv ö naar oe te vertalen, maar ja, blijft een workaround.

Heb een hoop gegoogled maar kan niet echt iets bruikbaars vinden.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 17:05

orf

Waarom multi_sort? sort() heeft de volgende optie: SORT_LOCALE_STRING die je in kunt stellen op Duits. (niet getest, maar het lijkt me dat daarmee logisch gesorteerd wordt.)

Acties:
  • 0 Henk 'm!

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:09
orf schreef op woensdag 12 november 2008 @ 20:39:
Waarom multi_sort? sort() heeft de volgende optie: SORT_LOCALE_STRING die je in kunt stellen op Duits. (niet getest, maar het lijkt me dat daarmee logisch gesorteerd wordt.)
Omdat ik deze functie heb/gebruik:

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
25
26
27
28
29
    /**
     * Sort a multidimensional array on values of given key 
     *
     * @param array $array
     * @param string    $key
     * @param const $sortOrder
     * @param bool  $caseSensitive
     */
    public function array_multisort_on_key(&$array, $key, $sortOrder = SORT_ASC, $caseSensitive = true)
    {
        if (!is_array($array))
        {
            return false;
        }
        
        foreach($array as $sortArray)
        {
            if ($caseSensitive)
            {
                $column[] = $sortArray[$key];
            }
            else
            {
                $column[] = strtolower($sortArray[$key]);
            }
        }   
        
        array_multisort($column, $sortOrder, $array);       
    } // end func array_multisort_on_key()


Had een heel erg afgeslankt voorbeeld gegeven.

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Volgens mij is het in dit geval het makkelijkst om usort() te gebruiken en een eigen vergelijkingsfunctie schrijven.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:09
Dat is een goede inderdaad, ga ermee aan de slag. Ik zal de functie die ik uitpoep hier ook nog wel even posten!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Als je alleen de goede locale instelt (met setlocale) werkt 't ook niet?

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:09
Soultaker schreef op donderdag 13 november 2008 @ 12:33:
Als je alleen de goede locale instelt (met setlocale) werkt 't ook niet?
Nope, op het moment dat iemand een taal kiest gebeurt er al

PHP:
1
setlocale(LC_ALL, $currentLanguage);


Heeft er geen effect op

Ik bedenk met net, misschien gebeurt dat wel NADAT de array gesort wordt.
Zo even kijken, eerst even wat anders afmaken.

[ Voor 14% gewijzigd door Maghiel op 13-11-2008 14:20 ]


Acties:
  • 0 Henk 'm!

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 17:09
Nee setlocale heeft er geen invloed op.
Pagina: 1