2017-03-27 36 views
1

嗨,我期待着找到一個簡單的解決方案來查找和枚舉double值。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

如果將來重複這再次訪問的 1返回值會使病情通,同方的影響,在 的if語句執行$counter[$e]將已經2點。 聲明將此數字連接到元素的末尾。

這樣,在第一次沒有連接,但有副作用 。在下一次迭代中,數字連接到 元素。

這裏使用@運算符來抑制PHP通知。由於您在第一遍處理未定義的元素時,您會收到通知。 腳本不會破壞。當然,這個操作符應該謹慎使用 ,但在這種情況下,它確實有助於簡化代碼,因此它不太嚴格。

+0

你能解釋一下,如果條件? – Bhaskar

+0

@Bhaskar當然,更新了答案:) – sidyll