2017-03-27 3 views
1

안녕하세요 저는 이중 값을 찾아서 열거하기 쉬운 솔루션을 찾고 있습니다. 에PHP 배열에서 double 값을 찾고 열거 함

array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples") 

: 그것을 위해 더 나은 솔루션

array("Papples", "Gelato", "Gelato2", "Banana", "Papples2","Papples3") 

나는 경우와 루프와 함께 할과 두 번째 배열 절차에 기록 할 수도 있지만이 없다?

감사합니다.

답변

1

당신이

<?php 
$arr = array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples"); 

$countarray = array_count_values($arr); 

$resultarray = array(); 
foreach ($countarray as $key=>$value) { 
    for ($i = 1; $i <= $value; $i++) { 
    $resultarray[]=$key.$i; 
    } 
} 

print_r($resultarray); 

?> 
0
$arr = array("Papples", "Gelato", "Gelato", "Banana", "Papples","Papples"); 
    $arr_count = array_count_values($arr); 
    $new_arr = array(); 
    foreach($arr_count as $key=>$val){ 
     if($val > 1){ 
      $k = 1; 
      for($i=0; $i<$val; $i++){ 
       if($i==0){ 
        $new_arr[] = $key; 
       }else{ 
        $new_arr[] = $key.++$k; 
       } 
      } 
     }else{ 
      $new_arr[] = $key; 
     } 
    } 
    echo "<pre>"; print_r($new_arr); 

테스트 스크립트를 시도 할 수 있습니다 : https://3v4l.org/iGf1s

1

루프에 가서 if를, 그것은 어렵지 않다 꽤 빠른 것입니다.

$delicatessen = [ 
    "Papples", "Gelato", "Gelato", "Banana", "Papples","Papples" 
]; 

foreach ($delicatessen as $e) { 
    if (@$counter[$e]++) $e .= $counter[$e]; 
    $new[] = $e; 
} 

은 기본적으로 어떤이가하는 것은 항상 명확하게, 새로운 배열에 를 요소를 추가하는 것입니다,하지만 그것을 수정하거나 없습니다. 조건은 $counter 배열 이며 항목이 나타나는 시간을 저장합니다. 모두는 " 날아라."에서 PHP가 허용합니다.

$counter[$e]을 검색 할 때이 요소가 아직 존재하지 않으므로 반환 값은 조건을 실패로 만듭니다. 그러나 부작용은 undef가 반환 된 후 이 증가하므로 (++) 이 $counter[$e]1이되도록 증가합니다.

측면이 이미 2 될 것 if 문이 $counter[$e] 실행되는 시점에서 영향을 미치는와이, 조건 패스를 만들 것입니다 다시 1의 반환 값을 액세스 할 때 반복 미래에합니다. 문은이 번호를 요소의 끝에 연결했습니다.

이렇게하면 처음에는 아무 것도 연결되지 않지만 부작용이 있습니다. 다음 반복에서 숫자는 요소로 연결됩니다.

@ 연산자는 여기에 PHP 고지를 억제하는 데 사용됩니다. 첫 패스에서 정의되지 않은 요소를 다루는 사람이 이니주의해야합니다. 스크립트가 중단되지 않습니다. 물론이 연산자는 으로 사용해야하지만이 경우에는 코드를 단순화하는 데 도움이됩니다. 은 덜 엄격합니다.

+0

'if'조건을 설명해 주시겠습니까? – Bhaskar

+0

@Bhaskar 예, 답변을 업데이트했습니다 :) – sidyll

관련 문제