我正在构建一个PHP函数,将JavaScript文件排入PHP数组,然后使用另一个PHP函数将所有JS文件加载到页面中,并根据可以传递给入队功能。类似于WordPress加载JS和CSS文件的方式。
所以我的PHP函数enqueue_js_script()
可能如下所示,其中包含JS文件的密钥名称,JS文件的文件路径以及可选的排序顺序号。然后它将JS文件添加到PHP类属性$this->_js_files[$script_key]
...
public function enqueue_js_script($script_key, $file_source, $load_order = 0){
$this->_js_scripts[$script_key] = $file_source;
}
然后我还将有一个PHP函数load_js_scripts()
,它将每个脚本文件路径打印到网页HTML的标题中。
这是我想要考虑传递到$load_order
的{{1}}以根据这些数字按顺序将脚本打印到HTML中的地方。
如何使用此排序顺序号对JS脚本数组进行排序?
更新
看起来我应该将排序号存储在这样的数组中......
enqueue_js_script()
答案 0 :(得分:2)
使用usort和自定义排序功能:
<?php
public function enqueue_js_script($script_key, $file_source, $load_order = 0){
$jsScript = new \stdClass;
$jsScript->load_order = $load_order;
$jsScript->script_key = $script_key;
$this->_js_scripts[$script_key] = $jsScript;
}
function sortJSFiles($a, $b)
{
if ($a->load_order == $b->load_order) {
return 0;
}
return ($a->load_order < $b->load_order) ? -1 : 1;
}
usort($this->_js_scripts, "sortJSFiles");
答案 1 :(得分:1)
必须传递数组键并不是一个好习惯。 $array[] = $foo
结构将$foo
添加为$array
的新最后一项。
使用usort。
<?php
class OrderStack {
private $contents = array();
public function add($order, $load) {
if (!is_int($order) || $order < 0) {
throw new InvalidArgumentException("$order must be a non-negative integer");
}
$this->contents[] = array($order, $load);
}
public function get_array() {
usort(
$this->contents,
'OrderStack::compare'
);
return array_map(
'OrderStack::get_load',
$this->contents
);
}
private static function get_load($stack_item) {
return $stack_item[1];
}
private static function compare($a, $b) {
return $a[0] - $b[0];
}
}
class YourClass {
private $_js_scripts;
public function __construct() {
$this->_js_scripts = new OrderStack();
}
public function enqueue_js_script($file_source, $load_order = 0) {
$this->_js_scripts->add($load_order, $file_source);
}
public function get_js_scripts() {
return $this->_js_scripts->get_array();
}
}
?>
OrderStack类是可重用的。