我有一系列产品.每个产品都是关联数组,并且具有ID,语言类型和产品类型ID.
[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($dataSortedByProductTypeId, function ($a, $b) {
if($a['language_id'] == 'en'){
if($b['language_id'] == 'en'){
return 0;
} else {
return -1;
}
} else {
return 1;
}
});
请帮忙
解决方法:
怎么样:
$array = [
['id' => '1', 'lang' => 'en', 'pid' => '1'],
['id' => '3', 'lang' => 'fr', 'pid' => '1'],
['id' => '7', 'lang' => 'es', 'pid' => '1'],
['id' => '2', 'lang' => 'en', 'pid' => '2'],
['id' => '4', 'lang' => 'fr', 'pid' => '2'],
['id' => '6', 'lang' => 'es', 'pid' => '2'],
['id' => '8', 'lang' => 'en', 'pid' => '3'],
['id' => '6', 'lang' => 'ru', 'pid' => '3']
];
usort($array, function ($a, $b) {
if ($a['lang'] == $b['lang']) {
return ($a['pid'] - $b['pid']);
}
if ($a['lang'] == 'en') {
return -1;
} elseif ($b['lang'] == 'en') {
return 1;
} else {
return ($a['pid'] - $b['pid']);
}
});