【发布时间】:2016-05-14 20:07:10
【问题描述】:
我有下一个多维数组(它相当长,但我在这里复制了第一个元素):
[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”值排序,然后按“tax”值,最后按“year”。
问题是“cpt”和“tax”的排序顺序应该是自定义顺序,而不是字母顺序。
好消息是:
- 生成的数组始终按“cpt”完美排序(您可以 看)。所以我不在乎排序。
- 我只需要应用这些排序更改(首先在“税”中,然后 "year" next) 用于特定的 "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;
}
});
有什么想法吗? 非常感谢!
【问题讨论】:
标签: php arrays sorting multidimensional-array