Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP排序-获取10、11、12。。。1,20,2而不是1,10,11,12。。。2, 20_Php_Sorting_Amazon Mws - Fatal编程技术网

PHP排序-获取10、11、12。。。1,20,2而不是1,10,11,12。。。2, 20

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

我有这样的参数需要排序(注意:我在将key=>value组合转换为字符串后进行排序):

我总共有大约30个参数。为了调用端点,我需要按字母顺序生成参数的签名

使用PHP的
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,“=”));})应该适合您。