/** * Tells how many occurrences of a specified value there are in a map. * * You can use your own comparator for the search, but the default comparator has got you covered when searching * for scalar values, such as `string`, `int`, `float`, and `bool`. And the default comparator is smart enough to * know how to compare objects of those classes that conform to the IEquality or IEqualityAndOrder interface * (static or not), including CUStringObject, CArrayObject, CMapObject, CTime etc. See the * [CComparator](CComparator.html) class for more on this. * * @param mixed $value The searched value. * @param callable $comparator **OPTIONAL. Default is** `CComparator::EQUALITY`. The function or method to be * used for the comparison of values while searching. If this parameter is provided, the comparator should take two * parameters, with the first parameter being a value from the map and the second parameter being the searched * value, and return `true` if the two values are equal and `false` otherwise. * * @return int The number of such values in the map. * * @link CComparator.html CComparator */ public function countValue($value, $comparator = CComparator::EQUALITY) { return CMap::countValue($this->m_map, $value, $comparator); }
public function testCountValue() { $map = ["one" => "a", "two" => "c", "three" => "b", "four" => "c", "five" => "d", "six" => "e", "seven" => "c", "eight" => "c", "nine" => "f", "ten" => "g", "eleven" => "h", "twelve" => "c"]; // Using the default comparator. $this->assertTrue(CMap::countValue($map, "c") == 5); // Using a custom comparator. $comparator = function ($string0, $string1) { return CString::toLowerCase($string0) === CString::toLowerCase($string1); }; $this->assertTrue(CMap::countValue($map, "C", $comparator) == 5); }