Задача: есть ассоциативный массив (ключ, например, имя, а значение цифра), нужно его отсортировать по значению, но не потеряв при этом ключи:

     
		
	
		Не мудрствуя лукаво, ниже код для сортировки массива по возрастанию arraySortUp и по убыванию arraySortDown:
 
function arraySortUp(&$aIn)
{
    $iCount = count($aIn);
    $aTMP = [];
    echo '<pre>';
    print_r($aIn);
    echo '</pre><hr/>';
    foreach($aIn as $key => $val)
    {
        $aTMP[] = [
            'key' => $key,
            'val' => $val,
        ];
    }
    /*
      echo '<pre>';
        print_r($aTMP);
      echo '</pre><hr/>';
    */
    for ($i = 0; $i < $iCount; $i++) {
        $iMinVal = $aTMP[$i]['val'];
        $iMinPos = $i;
        for ($j = $i; $j < $iCount; $j++) {
            if ($aTMP[$j]['val'] < $iMinVal) {
                $iMinVal = $aTMP[$j]['val'];
                $iMinPos = $j;
            }
        }
        if ($iMinPos != $i) {
            $iTMP = $aTMP[$i];
            $aTMP[$i] = $aTMP[$iMinPos];
            $aTMP[$iMinPos] = $iTMP;
        }
    }
    /*
      echo '<pre>';
        print_r($aTMP);
      echo '</pre>';
    */
    $aOut = [];
    foreach($aTMP as $aTMP2)
    {
        $aOut[$aTMP2['key']] = $aTMP2['val'];
    }
    return $aOut;
}
function arraySortDown(&$aIn)
{
    $iCount = count($aIn);
    $aTMP = [];
    echo '<pre>';
    print_r($aIn);
    echo '</pre><hr/>';
    foreach($aIn as $key => $val)
    {
        $aTMP[] = [
            'key' => $key,
            'val' => $val,
        ];
    }
    for ($i = 0; $i < $iCount; $i++) {
        $iMaxVal = $aTMP[$i]['val'];
        $iMaxPos = $i;
        for ($j = $i; $j < $iCount; $j++) {
            if ($aTMP[$j]['val'] > $iMaxVal) {
                $iMaxVal = $aTMP[$j]['val'];
                $iMaxPos = $j;
            }
        }
        if ($iMaxPos != $i) {
            $iTMP = $aTMP[$i];
            $aTMP[$i] = $aTMP[$iMaxPos];
            $aTMP[$iMaxPos] = $iTMP;
        }
    }
    /*
      echo '<pre>';
        print_r($aTMP);
      echo '</pre>';
    */
    $aOut = [];
    foreach($aTMP as $aTMP2)
    {
        $aOut[$aTMP2['key']] = $aTMP2['val'];
    }
    return $aOut;
}
$aIn = [];
$aIn['a10'] = 10;
$aIn['a1'] = 1;
$aIn['a5'] = 5;
$aIn['a-1'] = -1;
$aIn['a40'] = 40;
$aIn['a30'] = 30;
$aIn['a3'] = 3;
$aIn['a-100'] = -100;
echo '<pre>';
print_r($aIn);
echo '</pre>';
echo '<pre>';
print_r(arraySortDown($aIn));
echo '</pre>';