как удалить только реальные дубликаты из вывода preg_match?

Да, я знаю функцию array_unique , но дело в том, что совпадение может иметь законные дубликаты в моем поисковом выражении, например:

 $str = "fruit1: banana, fruit2: orange, fruit3: banana, fruit4: apple, fruit5: banana"; preg_match("@fruit1: (?<fruit1>\w+), fruit2: orange, fruit3: (banana), fruit4: (?<fruit4>apple), fruit5: (banana)@",$str,$match); array_shift($match); // I dont need whole match print_r($match); 

выход:

 Array ( [fruit1] => banana [0] => banana [1] => banana [fruit4] => apple [2] => apple [3] => banana ) 

Таким образом, единственными ключами, которые являются реальными дубликатами, являются [0] и [2], но array_unique дает:

 Array ( [fruit1] => banana [fruit4] => apple ) 

Это мое решение для вашей проблемы:

 unset($matches[0]); $matches = array_unique($matches); не unset($matches[0]); $matches = array_unique($matches); 

Я нашел это сам, решение – это цикл while, который удаляет следующий ключ, тот, который он есть, не является числовым:

 while (next($match) !== false) { if (!is_int(key($match))) { next($match); unset($m[key($match)]); } } reset($match); с while (next($match) !== false) { if (!is_int(key($match))) { next($match); unset($m[key($match)]); } } reset($match);