-1

I have an array called Array1. This contains names such as Array1 = "John, Ali, Ali, Mark, Susan, Susan, Susan, Ali, Julie, John" etc.

I would like to: 1st - count how many times each name appears in Array1 2nd - create a separate array removing duplicates from Array1 3rd - add to second array the count of duplicates.

Thus my final array would look like as such:

Array2 =
John => 2
Ali => 3
Mark => 1
Susan => 3
Julie =>1

How would i go about this? Any pointers in the right direction will be appreciated. Thanks

4

7 回答 7

1
<?php
$array1 = ["John", "Ali", "Ali", "Mark", "Susan", "Susan", "Susan", "Ali", "Julie","John"];
print_r(array_count_values($array1));
?>

输出

Array ( [John] => 2 [Ali] => 3 [Mark] => 1 [Susan] => 3 [Julie] => 1 )
于 2019-02-21T16:12:41.077 回答
1

您可以使用 PHP 的内置函数来实现所有这些:

https://3v4l.org/OHgPv

$array = ['Susan', 'Mark', 'Susan', 'Stephan'];

计算每个名称在 Array1 中出现的次数

$valuesCounted = array_count_values($array);

创建一个单独的数组,从 Array1 中删除重复项

$unique = array_unique($array);

将重复项的数量添加到第二个数组。

$duplicates = array_filter($valuesCounted, function($var) {
    return $var > 1;
});

$final = $unique;
$final['duplicates'] = $duplicates;

把它们放在一起:

<?php

$array = ['Susan', 'Mark', 'Susan', 'Stephan'];

$valuesCounted = array_count_values($array);


$unique = array_unique($array);

$duplicates = array_filter($valuesCounted, function($var) {
    return $var > 1; // We only want to have values in our array where the value was found more than once i.e. is a duplicate.
});

$final = $unique;
$final['duplicates'] = $duplicates;

var_dump($final);

7.1.25 - 7.3.2 的输出

array(4) { [0]=> string(5) "Susan" [1]=> string(4) "Mark" [3]=> string(7) "Stephan" ["duplicates"]=> array( 1) { [“苏珊”]=> int(2) } }

参考:

http://php.net/manual/en/function.array-count-values.php

http://php.net/manual/en/function.array-unique.php

http://php.net/manual/en/function.array-filter.php

于 2019-02-21T16:15:45.187 回答
0

array_count_values() for rescue :)

$array = explode(', ' , 'John, Ali, Ali, Mark, Susan, Susan, Susan, Ali, Julie, John');

$count = array_count_values( $array );
于 2019-02-21T16:12:28.950 回答
0

像这样的事情会做你想要的事情我认为:

$array2 = array();
foreach {$array1 as $name}{
    if (array_key_exists($name, $array2)) {
        $array2[$name] = $array2[$name] + 1;
    } else {
        $array2[$name] = 1;
    }
}

问候,凯

于 2019-02-21T16:14:56.260 回答
0

只需您可以使用内置 PHP 功能

array_count_values()

例如

$array1 = array('john','john', 'Ali');


$array2 = array_count_values($array);


print_r($array2);

结果:

Array ( [john] => 2 [Ali] => 1 ) 
于 2019-02-21T16:15:10.723 回答
0

对上述所有问题的完整解释

 <?php
$testArray = [
    'foo',
    'bar',
    'beer',
    'coffee',
    'foo',
    'bar',
    'beer',
    'coffee',
    'foo',
    'bar',
    'beer',
    'coffee',
];


$countArray = count($testArray);

$duplicatesRemoved = array_unique($testArray);
$vals = array_count_values($testArray);

print_r($vals);
于 2019-02-21T16:13:40.850 回答
0

检查 array_count_value 函数。它会非常适合你。检查以下代码:

$collection = array("Geeks", "for", "Geeks", "Geeks", "Welcome", "for");

$collectionValCounter = array_count_values($collection); // This will print all values with their apperance counter.

$collectionUnique = array_values(array_flip($collectionValCounter)); //Unique values with reset keys.
print_r($collectionValCounter); 
print_r($collectionUnique); 

希望它可以帮助你。

于 2019-02-21T16:13:48.410 回答