Prerequisiti:
Condizione fondamentale, non verificata dalla funzione che propongo, è che i subarray che compongono l'array dati a 2 dimensioni e l'array delle nuove posizioni abbiano tutti medesima cardinalità.
L'array delle nuove posizione sia organizzato in modo tale che nelle chiavi si abbiano le vecchie posizioni e nei valori le nuove.
Nota:
L'inizializzazione dell'array result è necessario affinché PHP non utilizzi l'array come associativo ma come indicizzato con chiave numerica. In realtà gli array PHP sono sempre associativi, quindi facciamo in modo che le chiavi numeriche siano in ordine corretto. Vengono quindi allocate tutte le posizioni necessarie e poi aggiornate con i valori corretti.
Risultato a video del codice di test:
codice:
Array
(
[0] => Array
(
[0] => D
[1] => V
[2] => V
[3] => D
[4] => F
[5] => X
)
[1] => Array
(
[0] => F
[1] => F
[2] => X
[3] => D
[4] => F
[5] => X
)
)
Codice sorgente:
Codice PHP:
<?php
function SortByArray($dataArray,$posArray){
//Inizializzazione dell'array result
foreach($dataArray as $key=>$array)
foreach($array as $value)
$result[$key][]="fake value";
//Allocazione dei dati nell'array risultante
foreach($dataArray as $key=>$array)
foreach($posArray as $old=>$new)
$result[$key][$new]=$array[$old];
return $result;
}
$data=array(
array('D','D','X','V','V','F'),
array('D','F','X','F','X','F')
);
$pos=array(3,0,5,1,2,4);
$newArray=SortByArray($data, $pos);
echo '<pre>'.print_r($newArray,true).'</pre>';
?>
Ora che mi sono distratto un po' torno al lavoro... ciao!