Autor Zpráva
mitr
Profil
Ahoj,
nemáte někdo prosím po ruce šikovný skript, který dobře zpracuje např tuto strukturu:

        6           5
      /   \       /   \
     2     7     9     3
   / | \
  1  4  8


Tím že mu dodám např pole kde bude jen:
id=parent
id=parent
....

tak aby mi vratil:

6 = array(2,7,1,4,8);
2 = array(1,4,8);
9 = array();
5 = array(9,3);

Abych mel jako vysledek pro vsechny prky jejich potomky.

Diky.
fajzen
Profil
mitr:
možno to nie je najoptimálnejšie riešenie, ale funguje (teda aspoň dúfam)
$arr = array(
	2 => 6,
		1 => 2,
			10 => 1,
			11 => 1,
				12 => 10,
		4 => 2,
		8 => 2,
	7 => 6,
	9 => 5,
	3 => 5
);
$result = array();

foreach($arr as $id => $parent) {
    if(!in_array($id, $result))
		$result[$id] = array();

	$result[$parent][] = $id;
}

foreach($result as $parent => $items)
	addChildrenArray($parent, null, $result);

function addChildrenArray($children, $parent, &$array)
{
	if(!isset($array[$children])) return;

	foreach($array[$children] as $item)
		addChildrenArray($item, $children, $array);

	if($parent === null) return;

	foreach($array[$children] as $item)
		if(in_array($item, $array[$parent]))
			return;
		else
			$array[$parent][] = $item;
}

print_r($result);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0