2013-05-30 54 views
0

好吧,這是範圍(必須從內存中背誦它,希望它有意義):具有「函數」的數組需要在它們出現之後進行排序並且返回值,以便您可以看到函數的順序,它們需要「加載」和它們的「依賴關係」。對「函數」數組進行排序後,它們的出現和返回值

不應該有重複和空白的回報應該被忽略

function human() 
{ 
    return ""; 
} 
function animal() 
{ 
    return ""; 
} 
function worker() 
{ 
    return "human"; 
} 
function clerk() 
{ 
    return "human"; 
} 
function manager() 
{ 
    return "clerk"; 
} 

$task = array("human", "worker", "human", "worker", "clerk", "manager", "animal"); 

結果數組應該是這樣的

$result = array(
    "human" => array(
     "worker" => array(), 
     "clerk" => array(
      "manager" => array(), 
     ), 
    ), 
    "animal" => array() 
); 

所以:人的需要「裝」,然後再工人,職員,經理和動物。 工作人員和職員依靠人力,經理依靠職員。

到目前爲止,我得到這個:

$result = array(); 
foreach($task as $function) 
{ 
    if(!in_array($function, $result)) 
    { 
     $result[$function] = array(); 
    } 
    $returnvallue = $function(); 

    if(!empty($returnvallue) && !in_array($returnvallue, $result)) 
    { 
     $result[$returnvallue] = array(); 
    } 
} 

這給了我這個數組

$result = array(
    "human" => array(), 
    "worker" => array(), 
    "clerk" => array(), 
    "manager" => array(), 
    "animal" => array() 
); 

但它只能說明我一次出現的順序。

我很難過。

+0

我認爲人類也應該回歸動物。 – Orangepill

+0

恩,那是我被賦予的任務...... – 5pike

回答

0
<? 
function human() 
{ 
    return ""; 
} 
function animal() 
{ 
    return ""; 
} 
function worker() 
{ 
    return "human"; 
} 
function clerk() 
{ 
    return "human"; 
} 
function manager() 
{ 
    return "clerk"; 
} 
function bird() 
{ 
    return "animal"; 
} 
function coworker() 
{ 
    return "worker"; 
} 
function things() 
{ 
    return ""; 
} 
$task = array("bird","animal","manager","human", "worker","things","human", "worker", "clerk", "animal","coworker"); 

$result = array(); 
foreach($task as $function) 
{ 
    $tmp=array(); 
    $tmp[]=$function; 
    $returnvalue = $function(); 
    if(!empty($returnvalue)) 
    { 

     $tmp[]=$returnvalue; 
     while(function_exists($returnvalue) && $returnvalue()<>"") 
     { 
      $tmp[]=$returnvalue=$returnvalue(); 

     } 
    } 
    $tmp2 =& $result; 
    foreach (array_reverse($tmp) as $key) 
    { 
     if(!isset($tmp2[$key]))$tmp2[$key]=array(); 
     $tmp2 =& $tmp2[$key]; 
    }  
} 
相關問題