[PHP5] usort icm strnatcasecmp werkt niet

Pagina: 1
Acties:

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 07-05 18:01
Ik wil een (multi-dimensionele) array sorteren met
usort($content, strnatcasecmp($b["date"], $a["date"]));

bij PHP versie 4.3.11 vindt hij dit goed maar nu ik het upload naar een andere server: PHP versie 5.0.4 vind hij het niet meer leuk.

Warning: usort() [function.usort]: Invalid comparison function. in C:\www\afile.php on line 9

Ik heb gekeken op de PHP site, maar naar het schijnt ondersteunen beide versies (4 en 5) de 2 functies usort en strnatcasecmp.

http://nl2.php.net/manual/en/function.usort.php
http://nl3.php.net/manual/en/function.strnatcasecmp.php

Kan iemand eens wat opheldering geven?

[ Voor 12% gewijzigd door Cheater op 21-04-2005 14:05 ]


  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 15-01 21:24
Je moet usort een functie voeren die de vergelijking uit gaat voeren, deze zou vervolgens strnatcasecmp() voor je kunnen uitvoeren,

Dit zou je alsvolgt kunnen aanpakken:
PHP:
1
2
3
4
5
6
function compare_date( $a, $b )
{
    return( strnatcasecmp( $b['date'], $a['date'] ) );
}

usort( $content, 'compare_date' );


Getest en werkend :)

[ Voor 38% gewijzigd door Huppie op 21-04-2005 14:18 ]

Proud member of TCF - D2OL is zooooo 2005


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 07-05 18:01
Hmmm.. zo had ik het EERST... en toen dacht ik, laat ik het regeltje IN de functie maar IN de usort functie zetten, en dat werkt ook :) maar versie 5 slikt em niet... ik ga het dan maar weer effe terugbouwen

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 15-01 21:24
Cheater schreef op donderdag 21 april 2005 @ 14:18:
Hmmm.. zo had ik het EERST... en toen dacht ik, laat ik het regeltje IN de functie maar IN de usort functie zetten, en dat werkt ook :) maar versie 5 slikt em niet... ik ga het dan maar weer effe terugbouwen
eigenwijs :P

Proud member of TCF - D2OL is zooooo 2005


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 07-05 18:01
He maar vraagje he,
PHP:
1
2
3
4
5
6
7
function comparestr($a,$b,$fieldname,$reverse) {
  if (!$reverse) {
    return( strnatcasecmp( $a['$fieldname'], $b['$fieldname'] ) ); 
  } else {
    return( strnatcasecmp( $b['$fieldname'], $a['$fieldname'] ) ); 
  }
}

Nu wil ik graag 1 functie maken voor dit soort sorteringen... en ik heb em wel 3 keer nodig. (3 keer een andere sortering). Kan ik dan zoiets maken zoals hierboven?

En hoe moet ik dat dan meegeven bij de functieaanroep?

usort($content, 'comparestr');

Of kan ik dan het beste een variable ($reverse) vullen met true/false en dan IN de functie globaal maken zodat ik erbij kan ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 04-05 14:55

Janoz

Moderator Devschuur®

!litemod

Dat kan niet. usort verwacht een functie met 2 parameters, niks meer en niks minder. Het enige dat je nog zou kunnen doen is losse tussenliggende functies maken:

compareOnDate($a,$b) { return comparestr($a,$b,'date',false);
compareOnDateReverse($a,$b) { return comparestr($a,$b,'date',true);

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1