从数组中删除重复值,忽略最后两个字符

时间:2016-10-24 00:47:26

标签: php

我正在开发一个小的PHP脚本,目前我有一个像这样的数组

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

我希望PHP检查是否存在重复元素(在本例中为yassine)并返回类似的内容。

[0] yassine , [1] Dolmi#m

array_unique不会工作。而且我真的不知道如何解决这个问题。如果在互联网上寻找解决方案,但似乎没有找到它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

我认为这可能适合你。

首先按值排序数组,然后使用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);

?>

答案 1 :(得分:0)

检查以下解决方案

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);