我有一个这样的字符串数组:
array
0 => string 'cheese=french'
1 => string 'pizza=large&cheese=french'
2 => string 'cheese=french&pizza=small'
3 => string 'cheese=italian'
我需要按字母顺序对数组中的字符串中的每个子字符串(除以&)进行排序。例如:pizza=large&cheese=french应该是相反的:cheese=法式奶酪&pizza=大号披萨,因为“c”在“p”之前。
我想我可以像这样分解原始数组:
foreach ($urls as $url)
{
$exploded_urls[] = explode('&',$url);
}
array
0 => array
0 => string 'cheese=french'
1 => array
0 => string 'pizza=large'
1 => string 'cheese=french'
2 => array
0 => string 'cheese=french'
1 => string 'pizza=small'
3 => array
0 => string 'cheese=italian'
然后在foreach循环中使用sort,比如:
foreach($exploded_urls as $url_to_sort)
{
$sorted_urls[] = sort($url_to_sort);
}
但当我这样做时,它只是返回:
array
0 => boolean true
1 => boolean true
2 => boolean true
3 => boolean true
4 => boolean true
直至:
14 => boolean true
当我这样做的时候:
foreach($exploded_urls as $url_to_sort)
{
sort($url_to_sort);
}
我得到一个数组,排序后:
array
0 => string 'cheese=dutch'
1 => string 'pizza=small'
我想要的结果:
array
0 => string 'cheese=french',
1 => string 'cheese=french&pizza=large',
2 => string 'cheese=french&pizza=small',
3 => string 'cheese=italian',
)
3条答案
按热度按时间m1m5dgzv1#
sort函数返回一个布尔值来显示它是否成功。在您的行业中:
你正在将sort的返回值(true或false)赋给$sorted_urls数组。你不需要这样做- sort会修改你调用它的数组,所以不要试图将结果分配到一个新的数组中,只需调用sort,然后查看你的排序数组的$url_to_sort。
从
sort
上的文档:上面的示例将输出:
水果[0] =苹果
香蕉[1]
水果[2] =柠檬
水果[3] =橙子
bmvo0sr52#
sort
返回一个布尔值(实际上是无用的),并进行原地排序。代码可以很简单,在这个循环之后,
$exploded_urls
的每个元素都将被排序。cwdobuhd3#
如果你知道你正在处理查询字符串,不要仅仅使用
explode()
;使用为任务设计的解析工具--parse_str()
。解析字符串后,按键对关联数组进行排序,然后使用
http_build_query()
将数据返回到其原始形式。代码:(Demo)