Во-первых, вы должны используйте parse_url
, чтобы извлечь часть запроса. Затем, используя parse_str
, вы можете отделить все параметры.
Это позволяет проверить правильность вашего URL-адреса.
Затем, если вы хотите, чтобы сортировать массив в любом поле, которое вы хотите (и не только на userId
), вам просто нужно создать функцию обратного вызова, которая займет 2 элемента вашего массива и возвращает -1, 0 или 1, если первый элемент равен <, =,> чем второй.
Затем, чтобы заказать массив, вы просто должны вызвать функцию usort
:
bool usort (array &$array , callable $cmp_function)
дающей ваш массив в качестве первого параметра и функции обратного вызова в качестве второго параметра. Это позволяет вам создать любой обратный вызов сравнения, который вы хотите, и заказать свой массив, как вы хотите.
Примечание: следите за производительностью. Если ваш обратный вызов делает много вещей, сортировка займет некоторое время, потому что функция обратного вызова называется большим количеством времени между элементами вашего массива, следуя определенному алгоритму сортировки (как пузырящийся вид).
Примером такой Comparision функции:
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()' на нем. –
Все они уникальны – user1294097
parse_url(), parse_str() следует использовать не регулярное выражение – 2013-02-26 03:53:51