Ordine array bidimensionale

  • Creatore Discussione Creatore Discussione Stefi
  • Data di inizio Data di inizio

Stefi

Nuovo Utente
14 Mag 2013
18
0
0
Salve,
volevo chiedere se era possibile fare un array che per ogni spazio ci siano dentro due valori, e dopo ordinarli in base ad un valore senza perdere l'altro valore.
Mi spiego con un esempio:
ho l'id
$id;
es ho una media che cambia in base a che id si ha
$media;
inserisco i valori nell'array bidimensionale in questo modo
array[1][1]=$id;
array[1][2]=$media;

quindi
array[1][1]=1;
array[1][2]=345;
array[2][1]=2;
array[2][2]=543;


altro id e media

Ora volevo metterli in ordine in base alla media.
e ottenere una cosa del genere:

array[1][1]=2;
arra[1][2]=543;
array[2][1]=1;
array[2][2]=345;
 
Ti ho scritto questa funzione che dovrebbe andar bene

PHP:
function ordina($a){
    $r = array();
    foreach($a as $a2)  //riordino l'array usando come chiave la media
        $r[$a2[2]] = $a2;
    krsort($r); //ordino le chiavi in modo decrescente, quindi anche gli elementi
    $r = array_values($r); //prendo i valori
    foreach($r as $k=>$v) //li riordino aumentandoli di 1 per riavere le chiavi originali
        $r[++$k] = $v;
    unset($r[0]); //elimino la prima chiave 0 per evitare il duplicarsi di essa
    return $r;
}

Test:
PHP:
$array = array();
$array[1][1]=1;
$array[1][2]=345;
$array[2][1]=2;
$array[2][2]=543;
$array[3][1]=3;
$array[3][2]=394;
$array[4][1]=4;
$array[4][2]=675;
$array[5][1]=5;
$array[5][2]=804;
$array[6][1]=6;
$array[6][2]=740;
$array[7][1]=7;
$array[7][2]=490;
$array[8][1]=8;
$array[8][2]=650;
echo '<pre>';
print_r(ordina($array));
echo '</pre>';


/* Output:
Array
(
    [1] => Array
        (
            [1] => 5
            [2] => 804
        )

    [2] => Array
        (
            [1] => 6
            [2] => 740
        )

    [3] => Array
        (
            [1] => 4
            [2] => 675
        )

    [4] => Array
        (
            [1] => 8
            [2] => 650
        )

    [5] => Array
        (
            [1] => 2
            [2] => 543
        )

    [6] => Array
        (
            [1] => 7
            [2] => 490
        )

    [7] => Array
        (
            [1] => 3
            [2] => 394
        )

    [8] => Array
        (
            [1] => 1
            [2] => 345
        )

)
*/
 
Ultima modifica:

Discussioni simili