---
title: "Sortera array"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/151889-sortera-array"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "fiddler"
published: "2006-09-30T07:44:30.000Z"
updated: "2006-09-30T13:27:52.000Z"
replies: 3
views: 406
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/151889-sortera-array"
---

# Sortera array

## #1 — fiddler, 2006-09-30T07:44Z

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?

Permalänk: https://www.webforum.nu/p/151889

## #2 — jme, 2006-09-30T08:27Z

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:

```php
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;  
		}
	}
}
```

Permalänk: https://www.webforum.nu/p/1875852

## #3 — Dies_Irae, 2006-09-30T13:15Z

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
)
```

Permalänk: https://www.webforum.nu/p/1875919

## #4 — fiddler, 2006-09-30T13:27Z

> **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.

Permalänk: https://www.webforum.nu/p/1875922

---

Tråden på webben: https://www.webforum.nu/amne/php/151889-sortera-array
