爲了解釋我的問題,讓我先點這個數組:如何遞歸檢查包含其他依賴項的文件包含依賴項的數組?
<?php
$_depends = array(
'/Scripting/jquery.hyponiqs/jquery.dropdown.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js",
"/Scripting/jquery.externals/jquery.timers.js",
"/Scripting/jquery-ui.min.js",
"/Scripting/jquery.hyponiqs/hyponiqs.core.js",
),
'/Script/UI/Dialogs.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js"
),
'/Script/Display/List.js' => array(
"/Scripting/jquery.externals/jquery.timers.js"
)
);
?>
每當包含的JavaScript文件,它是對這個數組的依賴性檢查。然後將每個文件的所有依賴關係添加到最終的$includes
陣列中。問題是當我添加具有依賴性的包括那些依賴的一個也有其自己的依賴,比如:
<?php
$_depends = array(
'/Scripting/jquery.hyponiqs/jquery.dropdown.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js",
"/Scripting/jquery.externals/jquery.timers.js",
"/Scripting/jquery-ui.min.js",
"/Scripting/jquery.hyponiqs/hyponiqs.core.js",
),
'/Script/UI/Dialogs.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js"
),
'/Script/Display/List.js' => array(
"/Scripting/jquery.externals/jquery.timers.js"
),
'/Script/UI/Calendar/Main.js' => array(
"/Scripting/jquery-ui.min.js",
"/Script/UI/Dialogs.js"
)
);
?>
正如你所看到的,所添加的'/Script/UI/Calendar/Main.js'
取決於"/Script/UI/Dialogs.js"
有其自己的依賴。
我知道我將不得不遞歸檢查依賴數組和final包含數組,但我似乎無法將我的頭圍繞邏輯。這裏有一點幫助可能會很好。
UPDATE
我在一類包裹的一切來說明它的目的(儘管實際的類要複雜得多,有各種其他包括處理功能:
<?php
class Script_Depends {
private $_includes = array();
private $_depends = array(
'/Scripting/jquery.hyponiqs/jquery.dropdown.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js",
"/Scripting/jquery.externals/jquery.timers.js",
"/Scripting/jquery-ui.min.js",
"/Scripting/jquery.hyponiqs/hyponiqs.core.js",
),
'/Script/UI/Dialogs.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js"
),
'/Script/Display/List.js' => array(
"/Scripting/jquery.externals/jquery.timers.js"
),
'/Script/UI/Calendar/Main.js' => array(
"/Script/UI/Dialogs.js",
"/Scripting/jquery-ui.min.js"
)
);
public function includes($includes)
{
if (is_string($includes)) $includes = array($includes);
foreach ($includes as $include) {
if (isset($this->_depends[$include])) {
$this->_includes = $this->includes($this->_depends[$include]);
array_push($this->_includes, $include);
}
else {
array_push($this->_includes, $include);
}
}
$this->_includes = array_unique($this->_includes);
return $this->_includes;
}
}
?>
感謝您的幫助。我無法相信答案是那麼簡單......而且我沒有看到它! – hyponiq 2010-08-10 13:11:43