Примите во внимание следующий код:
$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()
не пуленепробиваемый ... Есть идеи?