PHP dizi yinelenen değerleri algılamak nasıl?

5 Cevap php

PHP tek boyutlu bir dizi ile çalışıyorum. Ben yinelenen değerlerin sayısını sonra, yinelenen değerlerin varlığını tespit ve dışarı sonuçlarını koymak istiyorum. Örneğin, aşağıdaki dizi sunulmuştur:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');

Ben yazdırmak istiyorum:

apple (2)
orange
pear (2)
banana
kiwi (3)

Bu sorunu yaklaşım konusunda herhangi bir tavsiye?

Teşekkürler.

Mikrofon

5 Cevap

use array_count_values

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');

print_r(array_count_values($array));

çıktısı

Array
(
   [apple] => 2
   [orange] => 1
   [pear] => 2
   etc...
)

Sen anahtarları ve değerleri gibi olayların sayısı gibi meyveler ile bir ilişkisel diziye bu diziyi dönüm deneyebilirsiniz. Biraz uzun soluklu, ama bu gibi görünüyor:

$array = array('apple', 'orange', 'pear', 'banana', 'apple',
   'pear', 'kiwi', 'kiwi', 'kiwi');
$new_array = array();
foreach ($array as $key => $value) {
    if(isset($new_array[$value]))
    	$new_array[$value] += 1;
    else
    	$new_array[$value] = 1;
}
foreach ($new_array as $fruit => $n) {
    echo $fruit;
    if($n > 1)
    	echo "($n)";
    echo "<br />";
}

Belki de böyle bir şey (denenmemiş kodu ama size bir fikir vermek gerekir)?

$new = array();

foreach ($array as $value)
{
    if (isset($new[$value]))
        $new[$value]++;
    else
        $new[$value] = 1;
}

Sonra tuşları gibi değerlerle yeni bir dizi alırsınız ve onların değeri, orijinal dizideki var kez sayısıdır.

Kurtulmak yararlanmak için array_unique(). count(array_unique()) herhangi bir kullanımı var ve karşılaştırmak olmadığını tespit etmek için count($array).

Bir map (pseudocode) içine malzeme

map[string -> int] $m
foreach($word in $array)
{
    if(!$m.contains($word))
        $m[$word] = 0;

    $m[$word] += 1;
}