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和preg_match在url中按ID排序_Php_Preg Match_Usort_Ksort - Fatal编程技术网

如何使用php和preg_match在url中按ID排序

如何使用php和preg_match在url中按ID排序,php,preg-match,usort,ksort,Php,Preg Match,Usort,Ksort,我有一个php工作代码,其中我获取了一个充满URL的数组,我使用preg_match获取URL中的所有信息,例如,一个典型的URL如下所示: 要匹配用户ID,我在foreach循环中使用此选项: preg_match_all('/userid=(.+?)&hue/', $linklong, $userid); $userid = $userid[1][0]; //print_r($userid); 主数组是按字母顺序排序的,有600多个URL,它的显示

我有一个php工作代码,其中我获取了一个充满URL的数组,我使用preg_match获取URL中的所有信息,例如,一个典型的URL如下所示:

要匹配用户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\u url
来提取你的“查询”部分。然后,使用
parse_str
,可以分离所有参数

这允许您检查您的URL是否有效

然后,如果您希望能够在任何字段上对数组进行排序(而不仅仅是在
用户ID
上),您只需创建一个回调函数,该函数将接受数组中的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);
并检查
$wellsorded
,以了解排序操作是否成功


注意:您应该在
compareUrlCustom
函数中添加一些检查,以确保具有有效的URL,如果不是这样,则最终引发异常。

您的URL集中的每个用户ID都是唯一的,还是有一些重复的?如果没有重复,我建议使用已经提取的方法构建一个由userid索引的数组<代码>$arr[$userid]=$linklong然后只对其调用
ksort()