сортировка функции while

#php #sorting

#php #сортировка

Вопрос:

У меня есть журнал покупок в моем администраторе интернет-магазина, один клиент купил много товаров, все товары отмечены артикулом, и я хочу отсортировать и сгруппировать свой журнал покупок по артикулу.

Есть ли какой-либо способ отсортировать это и сгруппировать их?

Артикул журнала покупок может выглядеть следующим образом:

 27318
15277
14065
6236
vild-100
N/A
blomsterkasser-40g
16694
7147
24608
  

и отсортированная версия, которую я ищу:

 6236
7147
14065
15277
16694
24608
27318
blomsterkasser-40g
vild-100
N/A
  

Вот код:

 private function purchase_log_cart_items() {
while( wpsc_have_purchaselog_details() ) :
wpsc_the_purchaselog_item(); ?>
<tr>
<td><?php echo wpsc_purchaselog_details_quantity(); ?> x </td> <!-- QUANTITY! -->
<td><?php echo wpsc_purchaselog_details_name(); ?></td> <!-- NAME! -->
<td><?php echo wpsc_purchaselog_details_SKU(); ?></td> <!-- SKU! -->
<td>
<?php
echo wp.....
  

Комментарии:

1. вы пробовали sort ?

2. @kuh-chan Это, вероятно, не сработает, поскольку ‘N / A’ является последней записью в списке.

Ответ №1:

Вы можете сделать это с помощью usort и пользовательской функции сортировки:

 $array = [
    27318,
    15277,
    14065,
    6236,
    'vild-100',
    'N/A',
    'blomsterkasser-40g',
    16694,
    7147,
    24608
];

usort($array, function($left, $right) {
    // else 'blomsterkasser-40g' would be the first entry
    $left = (string) $left;
    $right = (string) $right;
    // always put 'N/A' on the last position
    if($left == 'N/A' amp;amp; $right == 'N/A') {
        return 0;    
    }else if($left == 'N/A') {
        return 1;
    } else if($right == 'N/A') {
        return -1;
    }

    return $left <=> $right;
});

var_dump($array);
  

Рабочий код:https://3v4l.org/2K5sO