PHP排序-获取10、11、12。。。1,20,2而不是1,10,11,12。。。2, 20
我有这样的参数需要排序(注意:我在将key=>value组合转换为字符串后进行排序): 我总共有大约30个参数。为了调用端点,我需要按字母顺序生成参数的签名 使用PHP的PHP排序-获取10、11、12。。。1,20,2而不是1,10,11,12。。。2, 20,php,sorting,amazon-mws,Php,Sorting,Amazon Mws,我有这样的参数需要排序(注意:我在将key=>value组合转换为字符串后进行排序): 我总共有大约30个参数。为了调用端点,我需要按字母顺序生成参数的签名 使用PHP的sort()只需不到10分钟就可以了,但当我尝试使用20分钟时,它会给我如下输出: SellerSKUList.SellerSKU.10=4574& SellerSKUList.SellerSKU.11=4575& ... SellerSKUList.SellerSKU.18=4582& SellerSK
sort()
只需不到10分钟就可以了,但当我尝试使用20分钟时,它会给我如下输出:
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
...
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.20=4584&
SellerSKUList.SellerSKU.2=4566
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
...
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.2=4566&
SellerSKUList.SellerSKU.20=4584
$url = array();
foreach ($param as $key => $val) {
$key = str_replace("%7E", "~", rawurlencode($key));
$val = str_replace("%7E", "~", rawurlencode($val));
$url[] = "{$key}={$val}";
}
sort($url);
我需要它是这样的:
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
...
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.20=4584&
SellerSKUList.SellerSKU.2=4566
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
...
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.2=4566&
SellerSKUList.SellerSKU.20=4584
$url = array();
foreach ($param as $key => $val) {
$key = str_replace("%7E", "~", rawurlencode($key));
$val = str_replace("%7E", "~", rawurlencode($val));
$url[] = "{$key}={$val}";
}
sort($url);
排序函数如下所示:
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
...
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.20=4584&
SellerSKUList.SellerSKU.2=4566
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
...
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.2=4566&
SellerSKUList.SellerSKU.20=4584
$url = array();
foreach ($param as $key => $val) {
$key = str_replace("%7E", "~", rawurlencode($key));
$val = str_replace("%7E", "~", rawurlencode($val));
$url[] = "{$key}={$val}";
}
sort($url);
在我看来,sort()函数应该提供所需的输出,但我的经验表明不同。是否有其他函数或其他方法对字符串中的1进行排序
我试过:
usort($url,strcmp) => 10,11,12...1,20,2
uksort($url,strcmp) => 10,11,12...20,2,1
natsort($url) => 1,2,3,...10,11,12
Desired: => 1,10,11...19,2,20
我找到了一个解决方案-如果在内爆键=>值对之前我
uksort($params,strcmp)
,那么排序顺序是正确的
uksort($param, 'strcmp');
$url = array();
foreach ($param as $key => $val) {
$key = str_replace("%7E", "~", rawurlencode($key));
$val = str_replace("%7E", "~", rawurlencode($val));
$url[] = "{$key}={$val}";
}
感谢@Thomas Smart在此处的评论:
我仍然想知道是否有一种方法可以像这样对字符串排序:
SellerSKUList.SellerSKU.10=4574&
SellerSKUList.SellerSKU.11=4575&
SellerSKUList.SellerSKU.18=4582&
SellerSKUList.SellerSKU.19=4583&
SellerSKUList.SellerSKU.1=4565&
SellerSKUList.SellerSKU.20=4584&
SellerSKUList.SellerSKU.2=4566
类似于usort($sku,function($a,$b){返回strcmp(substr($a,0,strpos($a,“=”)),substr($b,0,strpos($b,“=”));})代码>应该适合您。