Обратите внимание, что весь этот код встроен. Вам лучше:
- Нормализация размера при импорте, что устраняет большую часть этого беспорядка.
- Создание класса для всего этого.
В любом случае, вот соответствующий код.
// This is our lookup table to deal with strings.
$size_lookups = array('GB'=>pow(2,30), 'MB'=>pow(2,20), 'KB'=>pow(2,10), 'TB'=>pow(2,40));
// First, normalize all of the fields.
foreach ($terms as $taxitem)
{
$taxitem->fixed_size = intval($taxitem->size,10);
foreach ($size_lookups as $sizekey=>$sizemod)
{
if (strripos($taxitem->size, $sizekey))
{
$taxitem->fixed_size = intval($taxitem->size, 10) * $sizemod;
break;
}
}
}
// Set up a sorting function.
function sortBySize($a, $b)
{
return $b->fixed_size - $a->fixed_size;
}
// Do the sort.
$sorted = array_values($terms); // set up a shadow copy with new indexes.
usort ($sorted , 'sortBySize' );
// Display the results.
foreach ($sorted as $taxitem) {
echo '<span class="product_terms">' . $taxitem->name . '</span>';
}