php 整形 字符串排序,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']);

}

});

标签:arrays,php,sorting

来源: https://codeday.me/bug/20191118/2032058.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值