php-通过特定的字符串值进行排序

我有一系列产品.每个产品都是关联数组,并且具有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']);
    }
});
上一篇:javascript-按其元素之一的值对动态生成的列表进行排序


下一篇:PHP按列名排序多维数组