---
title: "Sortera array i klass"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/173631-sortera-array-i-klass"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2008-08-25T14:59:26.000Z"
updated: "2008-10-12T19:20:24.000Z"
replies: 2
views: 501
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/173631-sortera-array-i-klass"
---

# Sortera array i klass

## #1 — learn, 2008-08-25T14:59Z

Jag lyckas inte sortera min array i en klass:

```php
	
class Table
{
	private $data;
	private $order_by;

	public function __construct($data)
	{
		$this->data = $data;
	}

	public function set_order($order_by)
	{
		$this->order_by = $order_by;
		
		// Sorts an array
		function sort_array($a, $b)
		{
			$x = $a[$this->order_by];
			$y = $b[$this->order_by];
						
			if ( is_int($x) || is_float($x) )
			{
				return $x - $y;				
			}
				
			else
			{
				return strcmp($x, $y);
			}
		}

		// Sort data array
		usort($this->data, "sort_array");
	}
}
```

Arrayen $data ser ut enligt följande:

```php
Array
(
    [0] => Array
        (
            [id] => 1
            [username] => test
            [pass] => hejhej
        )

    [1] => Array
        (
            [id] => 2
            [username] => test2
            [pass] => lalala
        )

    [2] => Array
        (
            [id] => 3
            [username] => test3
            [pass] => hehehe
        )

)
```

Jag vill alltså kunna sortera den genom att skriva tex:

```php
$users_table = new Table($data);
$users_table->set_order("username");
```

Med ovanstående kod får jag detta:

> Fatal error: Using $this when not in object context in C:\\...

Hur ska jag göra istället?

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

## #2 — learn, 2008-08-25T15:17Z

Ah...

Hittade denna:

```php
function msort($array, $order_by) 
{
        $temp_array = array();

        while(count($array)>0)
        {
            $lowest_id = 0;
            $index=0;

            foreach ($array as $item)
            {
                if (isset($item[$order_by]) && $array[$lowest_id][$order_by]) 
                {
                    if ($item[$order_by]<$array[$lowest_id][$order_by])
                    {
                        $lowest_id = $index;
                    }
                }

                $index++;
            }

            $temp_array[] = $array[$lowest_id];
            $array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1));
        }
        return $temp_array;
    }
```

Funkar klockrent!

Några invändningar/förbättringstips?

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

## #3 — dreas, 2008-10-12T19:20Z

Hej,

Dammar av en gammal tråd då denna funktion kom till nytta för min del. Jag gjorde dock några enkla förändringar som gör att man kan välja ifall det ska vara DESC eller ASC sortering:

```php
function msort($array, $order_by, $sort_by) {
        $temp_array = array();

        while(count($array)>0)
        {
            $lowest_id = 0;
            $index=0;

            foreach ($array as $item)
            {
                if (isset($item[$order_by]) && $array[$lowest_id][$order_by]) 
                {
                    if ($item[$order_by]<$array[$lowest_id][$order_by] && $sort_by=='DESC')
                    {
						$lowest_id = $index;
                    }
					
					if ($item[$order_by]>$array[$lowest_id][$order_by] && $sort_by=='ASC') {
						$lowest_id = $index;
					}
                }

                $index++;
            }

            $temp_array[] = $array[$lowest_id];
            $array = array_merge(array_slice($array, 0,$lowest_id), array_slice($array, $lowest_id+1));
        }
        return $temp_array;
    }
```

Vilket man sedan anropar exempelvis med följande
$Class-\>msort($array, 'Kolumn', 'ASC');

Inget fancy, men förhoppningsvis kommer det till nytta för någon!

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

---

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