我有一个产品数组。每个产品都是关联数组,具有id、语言类型和产品类型id。
我希望按产品类型 ID 对所有内容进行排序,之后我还希望所有语言 ID 为 'en' 的项目出现在开头。
[1] => ["1", "en", "1"],
[2] => ["3", "fr", "1"],
[3] => ["7", "es", "1"],
[4] => ["2", "en", "2"],
[5] => ["4", "fr", "2"],
[6] => ["6", "es", "2"],
[7] => ["8", "en", "3"],
[8] => ["5", "ru", "3"],
我已经使用usort函数对产品ID数组进行了排序。
usort($data, function ($a, b) {
return ($a['product_type_id'] - $b['product_type_id']);
});
我希望按产品类型 ID 对所有内容进行排序,之后我还希望所有语言 ID 为 'en' 的项目出现在开头。
[1] => ["1", "en", "1"],
[2] => ["2", "en", "2"],
[3] => ["8", "en", "3"],
[4] => ["3", "fr", "1"],
[5] => ["7", "es", "1"],
[6] => ["4", "fr", "2"],
[7] => ["6", "es", "2"],
[8] => ["5", "ru", "3"],
我曾试图以多种不同的方式使用usort来实现这个目标,但是并没有成功。我甚至编写了一个单独的usort函数,将排序后的数组中只有"en"被置于顶部。在这种排序后,"en"确实位于顶部,但产品类型的顺序完全被破坏了。这是我的第二个usort函数。
usort($dataSortedByProductTypeId, function ($a, $b) {
if($a['language_id'] == 'en'){
if($b['language_id'] == 'en'){
return 0;
} else {
return -1;
}
} else {
return 1;
}
});
请帮忙
lang
,然后是pid
,因此我的所有条件语句基本上都在说en
排在第一位,但如果发生其它情况,则返回($a['pid'] - $b['pid'])
。 - user372495