---
title: "Rekursiv funktion med array i flera dimensioner"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/123133-rekursiv-funktion-med-array-i-flera-dimensioner"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "GrodanBoll"
published: "2005-02-23T19:30:59.000Z"
updated: "2005-02-26T17:58:22.000Z"
replies: 2
views: 331
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/123133-rekursiv-funktion-med-array-i-flera-dimensioner"
---

# Rekursiv funktion med array i flera dimensioner

## #1 — GrodanBoll, 2005-02-23T19:30Z

Tjena hej :)

Jag har fyllt en array med data innehållande en hierarkisk nivåsortering enligt:

```php
$testarray = array (
	1 => array ( "id" => 100, "descr" => "etthundra", "parentId" => "root" ),
	2 => array ( "id" => 200, "descr" => "tvåhundra", "parentId" => "root" ),
	3 => array ( "id" => 300, "descr" => "trehundra", "parentId" => "root" ),
	4 => array ( "id" => 400, "descr" => "fyrahundra", "parentId" => "root" ),
	5 => array ( "id" => 210, "descr" => "tvåhundratio", "parentId" => "2" ),
	6 => array ( "id" => 211, "descr" => "tvåhundraelva", "parentId" => "5" ),
	7 => array ( "id" => 220, "descr" => "tvåhundratjugo", "parentId" => "2" ),
	8 => array ( "id" => 500, "descr" => "femhundra", "parentId" => "root" ),
	9 => array ( "id" => 212, "descr" => "tvåhundratolv", "parentId" => "5" ),
	11 => array ( "id" => 110, "descr" => "etthundratio", "parentId" => "1" ),
	10 => array ( "id" => 600, "descr" => "sexhundra", "parentId" => "root" )

);
```

Denna skulle jag vilja visa i rättordning och med ett schysst indrag för subnivåer enligt förljande funktion som jag har försökt snickra ihop:

```php
function displayChildren ( $parent, $level, $array )
{
	/*
		The format of the array is as such:
		Array
		(
    		[0] => Array
				(
					[key01] => Value01
					[key02] => Value02
					[key03] => Value03
					[key04] => Value04
				)
		
			[1] => Array
				(
					[key01] => Value01
					[key02] => Value02
					[key03] => Value03
					[key04] => Value04
				)
		
			[2] => Array
			...
		);
	*/
	
	$arrTemp01 = array();
	$keyId = "parentId";
	
	
	
	// Retrive all children of $parent and put them in the temp arry $arrTemp01.
	
	for ( $i = 0; $i < count ( $array ); $i++ ) // Loop trough every main array element.
	{
		// In every sub array, check för the right value in the right key.
		
		if ( $array [$i][$keyId] == $parent )
		{
			$arrTemp01[$i] = $array [$i];
		
		}
	
	}
	
	
	
	// Display each child, if there where any children that is.
		
	foreach ( $arrTemp01 as $key => $value )
	{
		echo ( str_repeat ( "&nbsp;&nbsp;&nbsp;&nbsp;", $level ).$value['descr']." Current key: ".$key."<br />\n" );
		//echo "Current key: ".$key."<br />";
		
		// Call this function again 2 display this child's children.
						
		displayChildren ( $key, ($level+1), $array);
	
	}

	
}
```

Sen anropar jag funktionen med:

```php
displayChildren ( "root", 0, $testarray );
```

 

Problemet är att jag inte ser subarrayen med det största indexvärdet (nr 11).
Varför är det så?

Sen har jag även en andra undran som jag är nyfiken på.
Om jag sätter en subarray med index '0' (noll) så fastnar loopen, varför är det någon skillnad?

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

## #2 — aasah, 2005-02-24T16:45Z

Jag är inte helt säker på att detta löser ditt problem men... en idé på vägen i alla fall:

```php
function printArray(&$array, $indrag) {
  $incr = "     "; //tex
  foreach ($array as $ix => $value) {
    if (is_array($value)) {
      echo $indrag."$ix =><BR>";
      printArray($value, $incr.$indrag);
    }
    else {
      echo $indrag."$ix => $value<BR>";
    }
  }
}

//anrop
printArray($testArray, "");
```

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

## #3 — GrodanBoll, 2005-02-26T17:58Z

Tack, jag löste det med:

```php
function displayChildren2 ( $parent, $level, $dataarray)
{
	$keyId = 'parentId';

	foreach ($dataarray as $key => $element)
	{
		if ($element[$keyId] == $parent)
		{
			echo ( str_repeat ( "&nbsp;&nbsp;&nbsp;&nbsp;", $level ).$element['descr']." Current key: ".$key."<br />\n" );
			
			displayChildren2($key, $level + 1, $dataarray);
		
		}
	
	}

}
```

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

---

Tråden på webben: https://www.webforum.nu/amne/php/123133-rekursiv-funktion-med-array-i-flera-dimensioner
