首先,你應該使用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);
,並檢查$wellSorted
知道,如果排序操作是成功與否。
注意:您應該在compareUrlCustom
函數中添加一些檢查以確保具有有效的URL,並且如果不是這種情況,最終會拋出異常。
是否每個用戶標識在你的URL集中都是唯一的,或者你有一些重複的東西?如果沒有愚蠢的話,我會建議使用你已經提取的方法建立一個由userid建立索引的數組。 '$ arr [$ userid] = $ linklong;'然後調用'ksort()'。 – 2013-02-26 03:51:33
它們都是唯一的 – user1294097 2013-02-26 03:52:47
parse_url(),應該使用parse_str()而不是正則表達式 – 2013-02-26 03:53:51