fiddlerMedlem sedan juli 20023 617 inlägg Jag går bet på ett sorteringsproblem och hoppas på att någon av er gjort något liknande. :)
Jag vill sortera en array efter i första hand värdena, och i andra hand efter index. Alltså i de fall det finns flera lika värden vill jag att dessa sorteras efter sitt index. Någon som kan sparka mig i rätt riktning?
jmeMedlem sedan maj 20012 237 inlägg Menar du med index, den position som elementet finns i arrayn?
I så fall räcker det väl med att du bara testar om nästa värde i arrayn är lägre, eller högre än den nuvarande? Om det är lägre så byter dessa två värden plats:
for($i = 0; $i < count($arr); $i++)
{
if ($arr[$i+1] < $arr[$i])
{
if($i < count($arr) - 2)
{
$arr[i] = $tmp;
$arr[i] = $arr[i+i];
$arr[i+i] = $tmp;
}
}
}
Hm,
Om jag förstod dig rätt så ville du sortera värden och sen flytta dom i själva arrayn så att även keyn blir sorterad på dom ställen där värden är lika?
Du får gärna berätta varför du vill göra de, kan nämnligen inte se någon speciell anledning :)
Typ:
<?
function super_sort(&$arr) {
if (!is_array($arr)) return false;
asort($arr);
echo "Efter värdessortering:\n_________________\n";
print_r($arr);
$new_array = array();
reset($arr);
while(list($id, $value) = each($arr)) {
$next_key = key($arr);
$next_value = $arr[$next_key];
if ($next_value == $value && $id > $next_key) {
$new_array[$next_key] = $next_value;
$new_array[$id] = $value;
next($arr);
continue;
}
$new_array[$id] = $value;
}
$arr = $new_array;
}
// Slumpa fram en array.
for ($a = 0; $a < 10; $a++) $arr[rand(0, 10)] = rand(0, 5);
echo "Första array:\n_________________\n";
print_r($arr);
super_sort($arr);
echo "Sista sortering:\n_________________\n";
print_r($arr);
?>
Resultat:
Första array:
_________________
Array
(
[10] => 3
[2] => 2
[6] => 1
[4] => 0
[0] => 3
[8] => 2
)
Efter värdessortering:
_________________
Array
(
[4] => 0
[6] => 1
[8] => 2 // key 8 borde byta plats med 2an?
[2] => 2
[10] => 3 // 10an med 0an?
[0] => 3
)
Sista sortering:
_________________
Array // Sorterad efter value och sen keyn?
(
[4] => 0
[6] => 1
[2] => 2
[8] => 2
[0] => 3
[10] => 3
)
fiddlerMedlem sedan juli 20023 617 inlägg
Dies_Irae skrev:
Du får gärna berätta varför du vill göra de, kan nämnligen inte se någon speciell anledning :)
Tack för ditt svar! :)
Jag löste detta problem: http://mathschallenge.net/index.php?section=project&ref=view&id=124 men blev tvungen att sortera värdena runt 10000 manuellt för att få rätt svar.