Я пытаюсь найти нативную функцию PHP, которая возвращает true
если есть только одно вхождение любого данного элемента в массиве.
Например:
$searchedForValue = 3;
$array1 = [1,2,3,4,5,6];
$array2 = [1,2,3,3,4,5];
$array3 = [1,2,4,5,6];
oneOccurrence($array1,$searchedForValue);
oneOccurrence($array2,$searchedForValue);
oneOccurrence($array3,$searchedForValue);
Это должно вернуть:
true
false
false
ура
Вы должны использовать array_count_values () Вот.
$array_values = array_count_values($array2);
Это вернет массив. Ключ обозначает каждый элемент $array2
и значение обозначает частоту каждого элемента .:
Array (
[1] => 1
[2] => 1
[3] => 2 // Denotes 3 appears 2 times
[4] => 1
[5] => 1
)
if (@$array_values[$searchedForValue] == 1) {
echo "True";
} else {
echo "False";
}
Это делает то, что вы хотите. Пустоголовый, echo
ИНГ oneOccurence
не выводит «истина» или «ложь», он возвращает логическое значение.
function oneOccurrence ($arr, $val) {
$occurrences = [];
foreach ($arr as $v) {
if ($v == $val) {
$occurrences[] = $v;
}
}
return count($occurrences) == 1;
}
P.S echo
не нуждается в скобках, так как это конструкция PHP.
Небольшая служебная функция — подсчет значений массива с использованием array_count_values
а затем, если ключ поиска существует и если его количество точно равно 1, вернуть true
иначе false
:
function oneOccurrence($array, $searchValue) {
$array = array_count_values($array);
return (array_key_exists($searchValue, $array) && $array[$searchValue]==1)?true:false;
}
Проверьте EVAL
Так как вы ищете один вхождение: http://codepad.org/cZImb4FI
использование array_count_values ()
<?php
$searchedForValue = 3;
$array1 = array(1,2,3,4,5,6);
$array2 = array(1,2,3,3,4,5);
$array3 = array(1,2,4,5,6);
$arr = array($array1,$array2 ,$array3);
function array_count_values_of($value, $array) {
$counts = array_count_values($array);
return $counts[$value];
}
foreach($arr as $ar){
if( array_count_values_of($searchedForValue,$ar)==1){echo "true";}else{echo "false";}
}
?>
выход
правда ложь ложь
//In Php in_array() function is provided..
$searchedForValue = 3;
$array1 = array(1,2,3,4,5,6);
$array2 = array(1,2,3,3,4,5);
$array3 = array(1,2,4,5,6);
if(in_array($searchedForValue,$array1))
{
echo "true";
}
else
{
echo "false";
}
if(in_array($searchedForValue,$array2))
{
echo "true";
}
else
{
echo "false";
}
if(in_array($searchedForValue,$array3))
{
echo "true";
}
else
{
echo "false";
}