【问题标题】:How to sort by ID in url using php and preg_match如何使用 php 和 preg_match 在 url 中按 ID 排序
【发布时间】:2013-02-26 03:48:09
【问题描述】:

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

http://photos.com/path=images&user=Ron197&userid=970965&hue=soft

为了匹配用户 ID,我在 foreach 循环中使用它:

preg_match_all('/userid=(.+?)&hue/', $linklong, $userid);
        $userid = $userid[1][0];
        //print_r($userid);

主数组按字母顺序排序,包含 600 多个 url,它显示得很好,但我也尝试显示按 userid 排序的整个 URL 列表。

任何人都可以帮助我至少开始我尝试使用kso​​rt,usort,但老实说我不明白它背后的逻辑想法是linklong需要通过用户ID重新排列

【问题讨论】:

  • 您的 URL 集中的每个用户 ID 是唯一的,还是有一些重复的?如果没有欺骗,我建议使用您已经必须提取它的方法构建一个由 userid 索引的数组。 $arr[$userid] = $linklong; 然后只需调用 ksort() 就可以了。
  • parse_url(), parse_str() 不能用正则表达式

标签: php preg-match usort ksort


【解决方案1】:

首先,您应该使用parse_url 提取您的“查询”部分。然后,使用parse_str,您可以分隔所有参数。

这允许您检查您的网址是否有效。

然后,如果您希望能够在您想要的任何字段上对数组进行排序(而不仅仅是在 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);

并检查$wellSorted 以了解排序操作是否成功。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 2022-01-06
    • 1970-01-01
    • 2015-01-07
    • 2017-12-31
    • 1970-01-01
    • 2012-11-02
    • 2013-10-27
    相关资源
    最近更新 更多