Сортировать многомерный массив по разным значениям условно

1

У меня есть следующий многодисковый массив (он довольно длинный, но я копирую здесь первые элементы):

[0] => Array
    (
        [cpt] => Product
        [tax] => Type A
        [year] => 2012
    )

[1] => Array
    (
        [cpt] => Product
        [tax] => Type B
        [year] => 2012
    )

[2] => Array
    (
        [cpt] => Product
        [tax] => Type C
        [year] => 2011
    )

[3] => Array
    (
        [cpt] => Product
        [tax] => Type C
        [year] => 2011
    )

[4] => Array
    (
        [cpt] => Product
        [tax] => Type D
        [year] => 2015
    )

[5] => Array
    (
        [cpt] => Review
        [tax] => Figure
        [year] => 2014
    )

[6] => Array
    (
        [cpt] => Review
        [tax] => Sample
        [year] => 2012
    )

[7] => Array
    (
        [cpt] => Review
        [tax] => Figure
        [year] => 2012
    )

[8] => Array
    (
        [cpt] => Review
        [tax] => Picture based
        [year] => 2015
    )

[9] => Array
    (
        [cpt] => Review
        [tax] => Figure
        [year] => 2012
    )

[10] => Array
    (
        [cpt] => Review
        [tax] => Picture based
        [year] => 2013
    )
[11] => Array
    (
        [cpt] => Template
        [tax] => L
        [year] => 2013
    )

[12] => Array
    (
        [cpt] => Template
        [tax] => L
        [year] => 2015
    )

[13] => Array
    (
        [cpt] => Template
        [tax] => M
        [year] => 2011
    )

[14] => Array
    (
        [cpt] => Template
        [tax] => S
        [year] => 2011
    )

И мне сначала нужно отсортировать его по значению "cpt", затем по "налоговой" стоимости и, наконец, по "году".

Проблема в том, что порядок сортировки для "cpt" и "tax" должен быть на заказ, а не в алфавитном порядке.

И хорошие новости:

  • Массив всегда генерируется отлично отсортированным с помощью "cpt" (как вы можете видеть). Поэтому я не собираюсь его сортировать.
  • Мне нужно только применить эти изменения сортировки (сначала "налог" и "год") для определенного "cpt", то есть "Review".

Это мой код, но он недействителен, потому что он также изменяет порядок "cpt".

$sort_tax = array("Sample","Figure","Picture based");
usort($the_array, function ($a, $b) use ($sort_tax) {
    $pos_a = array_search($a['tax'], $sort_tax);
    $pos_b = array_search($b['tax'], $sort_tax);
    $result = $pos_a - $pos_b;
    if ($result == 0) {
        $difference = $a['year'] - $b['year'];
        if ($difference >= 0) {
            $value = 0;
        } else {
            $value = 1;
        }
        return $value;
    } else {
        return $pos_a - $pos_b;
    }
});

Есть идеи? Спасибо заранее!

Теги:
arrays
multidimensional-array
sorting

1 ответ

0
$array = array();
foreach($array_name as $arr){
  $array['cpt'] = $arr['cpt'];
  $array['tax'] = $arr['tax'];
  $array['year'] = $arr['year'];
} 

array_multisort($array['tax'], SORT_DESC, $array['year'], SORT_ASC,$Your_array_name);

Вы можете проверить array_multisort отсюда

  • 0
    Как я уже писал на вопрос: проблема в том, что порядок сортировки для "cpt" и "tax" должен быть произвольным, а не по алфавиту

Ещё вопросы

Сообщество Overcoder
Наверх
Меню