Проблемы с PHP array_unique и rsort - PullRequest
0 голосов
/ 25 декабря 2011

Я использую preg_match_all для извлечения телефонных номеров из потока. Это помещает их в массив, применяя и rsort, и array_unique к переменной match, однако они не имеют никакого эффекта, как раньше ... Массив array_unique удаляет совпадения, которые возникают только из дубликата цитаты или ответа, и rsort должен сделать последний индекс первый, второй до последнего, второй и т. д.

preg_match_all('~0-9]{3}-[0-9]{3}-[0-9]{4}~', $data, $matches) 
$result = array_unique($matches);
rsort($result);
var_dump($result);

Выход:

array
0 => 
array
  0 => string '111-111-1111' (length=12)
  1 => string '222-222-2222' (length=12)
  2 => string '333-333-3333' (length=12)
  3 => string '444-444-4444' (length=12)
  4 => string '555-555-5555' (length=12)
  5 => string '555-555-5555' (length=12)
  6 => string '555-555-5555' (length=12)

Должно быть:

array
0 => 
array
  0 => string '555-555-5555' (length=12)
  1 => string '444-444-4444' (length=12)
  2 => string '333-333-3333' (length=12)
  3 => string '222-222-2222' (length=12)
  4 => string '111-111-1111' (length=12)

Ответы [ 2 ]

1 голос
/ 25 декабря 2011

preg_match_all дает двумерный массив. у вас должен быть первый элемент $ match. для дальнейшей обработки с уникальным и rsort.

1 голос
/ 25 декабря 2011

Я думаю, вам нужен первый элемент в массиве совпадений.

preg_match_all('~0-9]{3}-[0-9]{3}-[0-9]{4}~', $data, $matches) 
$aList = $matches[0];
$result = array_unique($aList);

rsort($result);
var_dump($result);
...