我有一个php工作代码,其中我获取了一个充满URL的数组,我使用preg_match来获取URL中的所有信息,例如,一个典型的URL如下所示:
http://photos.com/path=images&user=Ron197&userid=970965&hue=软
为了匹配用户ID,我在foreach循环中使用这个:
preg_match_all('/userid=(.+?)&hue/', $linklong, $userid);
$userid = $userid[1][0];
//print_r($userid);
主数组按字母顺序排序,有600多个URL,它显示得很好,但我也试图显示按userid排序的整个URL列表。
有人能帮我开始吗?我试过使用ksort,usort,但我真的不明白背后的逻辑。这个想法是linklong需要由userid 重新排列
首先,您应该使用parse_url
来提取"查询"部分。然后,使用parse_str
,可以分离所有参数。
这允许您检查您的URL是否有效。
然后,如果您希望能够对所需的任何字段(而不仅仅是userId
(上的数组进行排序,您只需要创建一个回调函数,该函数将接受数组中的2个元素,并在第一个元素为<,=,>时分别返回-1、0或1比第二个。
然后,要对数组进行排序,只需调用函数usort
:
bool usort ( array &$array , callable $cmp_function )
将数组作为第一个参数,将回调函数作为第二个参数。这允许您创建所需的任何比较回调,并根据需要对数组进行排序。
注意:注意性能。。如果回调做了很多事情,排序将需要一些时间,因为回调函数在数组的元素之间被调用了很多时间,遵循特定的排序算法(如冒泡排序(。
这种比较函数的一个例子:
function compareUrlCustom($u1, $2)
{
// Parse the 2 URLs
$urlParts1 = parse_url($u1);
$urlParts2 = parse_url($u2);
// Extract and parse the 2 query parts
$queryParts1 = array();
$queryParts2 = array();
parse_str($urlParts1['query'], $queryParts1);
parse_str($urlParts2['query'], $queryParts2);
// Return 1, O or -1 as comparision value
if ($queryParts1['userId'] > $queryParts2['userId'])
return 1;
else if ($queryParts2['userId'] > $queryParts1['userId'])
return -1;
else
return 0;
}
然后,你可以用调用你的数组
$wellSorted = usort($yourArray, compareUrlCustom);
并且检查CCD_ 5以知道排序操作是否成功。
注意:您应该在compareUrlCustom
函数中添加一些检查,以确保具有有效的URL,如果不是这样,则最终抛出异常。