function rearrange_array(&$arr) {
$size = count($arr);
for ($i = 0; $i < $size; $i++)
$arr[$i] += ($arr[$arr[$i]] % $size) * $size;
for ($i = 0; $i < $size; $i++)
$arr[$i] = intval($arr[$i] / $size);
}
$arr = array(3, 5, 0, 2, 1, 4);
// arr[arr[0]] = 2 -> arr[0] = 2
// arr[arr[1]] = 4 -> arr[1] = 4
// arr[arr[2]] = 3 -> arr[2] = 3
// arr[arr[3]] = 0 -> arr[3] = 0
// arr[arr[4]] = 5 -> arr[4] = 5
// arr[arr[5]] = 1 -> arr[5] = 1
rearrange_array($arr);
print_r($arr);
/*
run:
Array
(
[0] => 2
[1] => 4
[2] => 3
[3] => 0
[4] => 5
[5] => 1
)
*/