У меня есть следующий многодисковый массив (он довольно длинный, но я копирую здесь первые элементы):
[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".
$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;
}
});
Есть идеи? Спасибо заранее!
$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 отсюда