2016-10-24 4 views
0
난 작은 PHP 스크립트 작업입니다

을 무시과 배열에서 중복 된 값을 제거, 현재 나는이마지막 두 문자

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

같은 배열이 나는 중복 요소가있는 경우 PHP는 야신 (확인 할이 이 경우) 다음과 같이 반환하십시오.

[0] yassine , [1] Dolmi#m 

array_unique가 작동하지 않습니다. 그리고 저는이 문제를 해결하는 방법을 알지 못합니다. 인터넷에서 해결책을 찾지 만 찾지 못하는 것 같습니다. 누구든지 도와 줄 수 있니?

+0

그래서 'yassine'을 원하기 때문에 여러 개의 yassine 또는 Dolmi이어야합니까? substr을 사용하는 표준 foreach 루프가 왜 작동하지 않을까요? – Devon

+0

3 개의 다른 태그 (# m, # f, # l)가있는 여러 개의 yassine이 있으므로 다른 태그와 동일한 값이있을 때마다 태그를 모두 삭제하고 값을 유지해야합니다. 태그가 하나있는 값이 있으면 그냥 보관해야합니다. –

답변

0

나는 이것이 당신을 위해 일할지도 모른다라고 생각한다. 값을 기준으로

첫 번째 종류의 배열은 다음 다음 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); 

?> 
0

확인 다음과 같은 솔루션

http://ideone.com/fork/kJlLbs

를 사용하여 중복 값을 제거 당신의 필요 에 따라 새로운 배열을 만들 substr(), strpos()array_push()의 조합을 사용하여
<?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);