我有一系列脚本
Array
(
[0] => /js/ionslider/ion.rangeSlider.min.js
[1] => /media/jquery/jQuery-2.1.4.min.js
[2] => /media/bootstrap/js/bootstrap.min.js
[3] => /widgets/wid_menu/js/menu.js
)
如何对此进行排序以获得结果:
Array
(
[0] => /media/jquery/jQuery-2.1.4.min.js
[1] => /media/bootstrap/js/bootstrap.min.js
[2] => /js/ionslider/ion.rangeSlider.min.js
[3] => /widgets/menu/js/menu.js
)
E.g将jQuery脚本和引导程序放在顶部。 P.SjQuery版本文件将来可能会更改。 谢谢!
答案 0 :(得分:1)
你可以使用usort($ arr,“cmp”);并使用自定义排序功能。然后在该排序函数中,您可以使用正则表达式定义一个可满足您需求的preg_match,该表达式验证包含任何版本和“bootstrap”的“jquery”的字符串。
答案 1 :(得分:1)
您的排序方法中没有标准。也许你可以分类'元素在将它们添加到数组时,或实现依赖系统。
否则,您可以在数组中设置排序条件,即:
$patterns = [ '/media/jquery/', '/media/bootstrap/', '/js/' ];
尊重您所需的排序顺序,然后您可以使用函数与usort
一起使用,如下所示:
function scriptSort( $a, $b )
{
$patterns = [ '/media/jquery/','/media/bootstrap/','/js/' ];
$keyA = $keyB = count( $patterns );
foreach( $patterns as $key => $pattern )
{
if( strpos( $a, $pattern ) === 0 ) $keyA = $key;
if( strpos( $b, $pattern ) === 0 ) $keyB = $key;
}
if( $keyA !== $keyB ) return $keyA - $keyB;
else return $a > $b;
}
usort( $scripts, 'scriptSort' );
的 eval.in demo 强>
在自定义函数中,首先我们将两个变量($keyA
和$keyB
)设置为模式数组的总项,然后我们搜索路径模式是否匹配传递值 - 如果是 - 我们将$keyA/B
设置为相应的数组键。最后,我们返回关键差异(在开始时我们设置为总计数,因此如果找不到密钥,$keyA/B
值> gt;而不是找到的值),否则我们按字母顺序排序。
答案 2 :(得分:0)
Usort是个不错的选择。另一种方法是循环遍历脚本,一次一个地传输到新阵列。如果它们包含您要查找的其中一个字符串,请将它们推到新数组的开头,如果它们没有,则将它们推到最后。
foreach ($scripts as $script) {
if (strpos($script, '/media/jquery') !== false
|| strpos($script, '/media/bootstrap') !== false) {
array_unshift($sorted_scripts, $script); // add to beginning
} else {
$sorted_scripts[] = $script; // add to end
}
}
答案 3 :(得分:0)
也许最好将其称为“重新排序”而不是“排序”
但是,有多种方法可以做到。
我刚刚编写了一个简单的:
$current = array(
'/js/ionslider/ion.rangeSlider.min.js',
'/media/jquery/jQuery-2.1.4.min.js',
'/media/bootstrap/js/bootstrap.min.js',
'/widgets/wid_menu/js/menu.js',
);
$priorities = array(
'jquery',
'bootstrap',
'menu',
);
function reorder($array, $priors){
$result = array();
foreach ($priors as $p) {
$result = array_unique (array_merge ($result , preg_grep ('/'.$p.'/i', $array)));
}
return array_unique (array_merge ($result , $array));
}
echo '<pre>'.print_r(reorder($current,$priorities),true).'</pre>';