看看下面的代码考虑:找出最常见的扩展在Array
$files = array('1.js', '1.css', '2.js', '2.css', '3.js', '3.png');
$extensions = array();
foreach ($files as $file)
{
$extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (empty($extensions[$extension]) === true)
{
$extensions[$extension] = 0;
}
++$extensions[$extension];
}
arsort($extensions); // array('js' => 3, 'css' => 2, 'png' => 1)
$common_extension = key($extensions); // js
的代码似乎工作,因为我希望它(我仍然需要检查发生了什么万一有一场平局,但这与这个问题无关)。我在寻找一种更有效的(和紧凑的方式)重写上面的代码中的,到目前为止,我已经得到了最接近的是:
$files = array('1.js', '1.css', '2.js', '2.css', '3.js', '3.png');
$extensions = array_count_values(array_map('strtolower', preg_replace('~^.*[.](.*)$~', '$1', $files)));
arsort($extensions, SORT_NUMERIC);
$common_extension = key($extensions);
但这遍历数组的3倍,并且preg_replace()
不是防弹... 有任何想法吗?
我会使用普通的字符串函数,而不是正则表达式,如果你关心它。缺点是你最终会多出几行,因为你不能将数组传递给这些字符串函数。 – 2011-05-02 01:35:59
您可以编写自己的方法,其中包含'strtolower'和''pathinfo'片段以用于'array_map'调用。这将为您节省一次迭代。如果你不想'array_count_values'再次运行数组,你必须再次指望你自己。 – Frank 2011-05-02 01:47:37