Удаление повторяющихся значений из массива с игнорированием последних двух символов

#php

#php

Вопрос:

Я работаю над небольшим php-скриптом, в настоящее время у меня есть массив, подобный этому

 [0] yassine#m, [1] yassine#f, [2] Dolmi#m , [3] yassine#l
  

Я хочу, чтобы PHP проверил, есть ли дублированный элемент (в данном случае yassine), и вернул что-то вроде этого.

 [0] yassine , [1] Dolmi#m
  

array_unique не будет работать. И я действительно не имею ни малейшего представления, как это решить. Если искал решение в Интернете, но, похоже, не нашел его. Кто-нибудь может помочь, пожалуйста?

Комментарии:

1. Так вы хотите просто yassine потому что их несколько yassine или [2] должно быть Dolmi ? Почему не сработал бы стандартный цикл foreach с использованием substr?

2. Существует несколько yassine с 3 разными тегами (#m, # f, # l), поэтому я хочу, чтобы всякий раз, когда есть одно и то же значение с разными тегами, все они должны быть удалены и сохранить значение без тегов. и если есть значение с одним тегом, его следует просто сохранить.

Ответ №1:

Я думаю, это может сработать для вас.

Сначала отсортируйте массив по значению, затем используйте комбинацию substr(), strpos() и array_push() для создания нового массива в соответствии с вашими потребностями, затем удалите повторяющееся значение с помощью array_unique()

 <?php
$oldarray = array("suman#1","suman#2","suman#3","sujan#1","suresh#2",""); 
// first sort array by value so matching value comes together
asort($oldarray);
$newarray = array();
$count = count($oldarray);
for($i=0; $i < $count-1; $i  ){
 $a = $oldarray[$i];
 $b = $oldarray[$i 1];
    if($i == 0)
        $c = "";
    else 
        $c = $oldarray[$i-1];
    if(substr($a,0,strpos($a,"#")) == substr($b,0,strpos($b,"#")) || substr($a,0,strpos($a,"#")) == substr($c,0,strpos($c,"#")) ){
     array_push($newarray,substr($a,0,strpos($a,"#")));
    }
     else
        array_push($newarray,$a);
} 
print_r($oldarray);
// now remove duplicate value from new array
$newarray = array_unique($newarray);
print_r($newarray);

?>
  

Ответ №2:

Проверьте следующее решение

http://ideone.com/fork/kJlLbs

 <?php

function generateUniqueList ($arr){
  $ret = array();

  foreach ($arr as $value) {
      $key = explode("#", $value)[0];
      if (array_key_exists($key, $ret)) {
        $ret[$key] = $key;
      }
      else {
        $ret[$key] = $value;
      }
  }

  return array_values($ret);
}
$arr  = array("yassine#m","yassine#f","Dolmi#m", "yassine#l");
$list = generateUniqueList ($arr);
print_r($list);