Wie Beispiel 1, nur jetzt als Klasse realisiert, auch um das Ordnungs-Array als Parameter übergeben zu können.
<?php
class SortByArray
{
var $order = 1;
function SortByArray($arr)
{
$this->map = $arr;
}
function Sort($a)
{
usort($a, array($this,'Compare'));
return $a;
}
function Compare($a,$b)
{
$map = $this->map;
$order = $this->order;
$a2use = preg_replace('/[_0-9]*$/','',$a);
$b2use = preg_replace('/[_0-9]*$/','',$b);
$na = array_search($a2use, $map);
$nb = array_search($b2use, $map);
// wenn nicht im "Ordnungsarray" an das Ende
if ($na === false && $nb === false) {
return strcasecmp($a, $b);
}
if ($na === false) {
return $order;
}
if ($nb === false) {
return -$order;
}
if ($na == $nb) {
return strcasecmp($a, $b);
}
return ($na < $nb) ? -1 : 1;
}
} /* END CLASS */
$a = array(
'd_2',
'c_1',
'd_2',
'd_2',
'd_1',
'a_1',
'd_3_2',
'A',
'X',
'a',
'b_2',
'c_2',
'd_3_1',
'b_1',
);
$map = array(
'd',
'b',
'c',
'a',
);
$o = new SortByArray($map);
$c = $o->Sort($a);
echo join('<br>', $c);
?>