PHP usort函数对具有递增元素的数组进行排序
我左右为难。因为我使用的是Amazon的MWS,所以在散列内容之前,我必须像Amazon一样获得数组的顺序,否则我生成的散列和Amazon生成的散列将不匹配,Amazon将不接受我的提要 虽然我知道PHP的PHP usort函数对具有递增元素的数组进行排序,php,sorting,usort,Php,Sorting,Usort,我左右为难。因为我使用的是Amazon的MWS,所以在散列内容之前,我必须像Amazon一样获得数组的顺序,否则我生成的散列和Amazon生成的散列将不匹配,Amazon将不接受我的提要 虽然我知道PHP的usort,但我从未使用过它,所以我不确定如何创建一个满足我需要的函数 以下是阵列: Array ( [0] => AWSAccessKeyId=XXXXXXXX [1] => Action=ListInventorySupply [2] => Mar
usort
,但我从未使用过它,所以我不确定如何创建一个满足我需要的函数
以下是阵列:
Array (
[0] => AWSAccessKeyId=XXXXXXXX
[1] => Action=ListInventorySupply
[2] => MarketplaceId=XXXXXXX
[3] => ResponseGroup=Basic
[4] => SellerId=XXXXXX
[5] => SellerSkus.member.10=SKU10
[6] => SellerSkus.member.11=SKU11
[7] => SellerSkus.member.1=SKU1
[8] => SellerSkus.member.2=SKU2
[9] => SellerSkus.member.3=SKU3
[10] => SellerSkus.member.4=SKU4
[11] => SellerSkus.member.5=SKU5
[12] => SellerSkus.member.6=SKU6
[13] => SellerSkus.member.7=SKU7
[14] => SellerSkus.member.8=SKU8
[15] => SellerSkus.member.9=SKU9
[16] => SignatureMethod=HmacSHA256
[17] => SignatureVersion=2
[18] => Timestamp=2016-04-06T22%3A26%3A41Z
[19] => Version=2010-10-01
)
问题是亚马逊的分类只是略有不同:
Array (
[0] => AWSAccessKeyId=XXXXXXXX
[1] => Action=ListInventorySupply
[2] => MarketplaceId=XXXXXXX
[3] => ResponseGroup=Basic
[4] => SellerId=XXXXXX
[5] => SellerSkus.member.1=SKU1
[6] => SellerSkus.member.10=SKU10
[7] => SellerSkus.member.11=SKU11
[8] => SellerSkus.member.2=SKU2
[9] => SellerSkus.member.3=SKU3
[10] => SellerSkus.member.4=SKU4
[11] => SellerSkus.member.5=SKU5
[12] => SellerSkus.member.6=SKU6
[13] => SellerSkus.member.7=SKU7
[14] => SellerSkus.member.8=SKU8
[15] => SellerSkus.member.9=SKU9
[16] => SignatureMethod=HmacSHA256
[17] => SignatureVersion=2
[18] => Timestamp=2016-04-06T22%3A26%3A41Z
[19] => Version=2010-10-01
)
您将看到前三个SellerSkus.member.{#}
元素的键是不同的。我需要能够保持其余的排序相同,除了当有10个或更多SKU时,它需要像Amazon的排序一样排序
我已经读过了,但是我仍然没有得到任何超过10项的东西。似乎我必须跟踪
SellerSkus.member.{#}
编号,以便对它们进行正确排序,但我对如何使用usort
进行排序一无所知。任何正确方向的指导都会很棒!谢谢。看起来您需要一个普通的字典排序,但在比较时只使用=
之前的字符串部分。因此,您的比较函数应该找到=
,获取前面的子字符串,并对它们进行比较
usort($array, function($a, $b) {
$a = substr($a, 0, strpos($a, '='));
$b = substr($b, 0, strpos($b, '='));
return ($a < $b) ? -1 : 1;
});
usort($array,function($a,$b){
$a=substr($a,0,strpos($a,'=');
$b=substr($b,0,strpos($b,'=');
回报率($a<$b)?-1:1;
});
看起来您需要一个普通的字典排序,但在比较时只使用=
之前的字符串部分。因此,您的比较函数应该找到=
,获取前面的子字符串,并对它们进行比较
usort($array, function($a, $b) {
$a = substr($a, 0, strpos($a, '='));
$b = substr($b, 0, strpos($b, '='));
return ($a < $b) ? -1 : 1;
});
usort($array,function($a,$b){
$a=substr($a,0,strpos($a,'=');
$b=substr($b,0,strpos($b,'=');
回报率($a<$b)?-1:1;
});
看看natsort
,它会找到字符串的数字部分并对其进行数字排序。@Barmar谢谢natsort
获取那些元素SellerSkus.member.10
和SellerSkus.member.11
并将它们放置在元素SellerSkus.member.9
后面。奇怪的是,在natsort
页面上,它显示了一个“标准排序”部分,按照我的需要对值进行排序,但是sort
甚至asort
实际上并不是这样对数组进行排序的。对不起,我读错了,我以为您想要的是数字顺序。请看natsort
,它会找到字符串的数字部分并对其进行数字排序。@Barmar谢谢natsort
获取那些元素SellerSkus.member.10
和SellerSkus.member.11
并将它们放置在元素SellerSkus.member.9
后面。奇怪的是,在natsort
页面上,它显示了一个“标准排序”部分,按照我的需要对值进行排序,但是sort
甚至asort
实际上并不是这样对数组进行排序的。对不起,我读错了,我以为您想要按数字顺序排序。首先,谢谢!第二,我必须把你的答案读三遍才能弄明白“lexographic”是什么意思!哈哈哈。我很感激!首先,谢谢你!第二,我必须把你的答案读三遍才能弄明白“lexographic”是什么意思!哈哈哈。我很感激!