Считать разы, которые повторяет элемент в одной, договоренность с php

Существует какая-то функция в php что возвратил количество раз, которое повторено элемент внутри одного array?. Если это не будет так, я буду должен пробегать каждый элемент и посредством счетчика видеть, сколько раз он повторяется.

introducir la descripción de la imagen aquí

Нечто похожее, как функция count() что у него есть Python. Вывода этой программы было бы 2, так как один присутствует два раза в array.

5
задан 03.11.2016, 08:01
4 ответа

С функцией array_count_values

$valores = array_count_values($array);

Ответ ты врученный все те число и все разы повторяют

Array
(
       [1] => 2
       [2] => 2
       [3] => 1
)
4
ответ дан 24.11.2019, 12:45
  • 1
    Спасибо, он я был полезным. – Patricio Nicolas 03.11.2016, 05:50
  • 2
    Ответ est и # 225; добро, схвати и # 237; что идет +1. Но важно подтверждать, чтобы $array был array и что искавшая стоимость существовала в результате посредством array_key_exists. Например, имей это и # 233; s в моем ответе;) – ESL 03.11.2016, 08:25
  • 3
    @ESL спасибо за комментарий! – sioesi 03.11.2016, 11:52

Я вижу два выбора, у которых не было бы недостатков после того, как искали бы стоимость с запятой или кавычками.

Первый выбор был бы той, о которой они упоминают @sioesi и @alvaro-montoro, были урожденной, будьте вероятно очень быстрой. В этом случае, tenés, что быть осторожен, так как, если стоимость не существует, не podés находить это:

<?php
function contar_valores($a,$buscado)
 {
  if(!is_array($a)) return NULL;
  $v=array_count_values($a);
  return array_key_exists($buscado,$a)?$v[$buscado]:0;
 }

Но конечно, если тебе интересно сравнивать единственную стоимость, он создает в памяти array с элементом из-за каждой единственной стоимости. Например, array(1,2,3,4,5,6,7,8,9,10,1), у которого есть 11 длиной, производит другой 10 элементов длиной:

array(
       [1]=>2,
       [2]=>1,
       [3]=>1,
       [4]=>1,
       [5]=>1,
       [6]=>1,
       [7]=>1,
       [8]=>1,
       [9]=>1,
       [10]=>1,
)

С этим количеством не было бы должно быть проблемы, но если tratás arrays длины он может тратить много памяти, потому что creás один из сходного размера.

Взамен, если intentás считать единственную стоимость, более просто пробегать array и сравнивать каждую стоимость, используя foreach. Podés делать это в единственной линии (2 инструкции), если ты уверен, что $a это array: $i=0;foreach($a as $v) if($buscado===$v) $i++;

Если querés как функция, podés делать следующее:

<?php
function contar_valores($a,$buscado)
 {
  if(!is_array($a)) return NULL;
  $i=0;
  foreach($a as $v)
   if($buscado===$v)
    $i++;
  return $i;
 }

Так, он должен бы быть работоспособнее в управлении памяти, так как он только создает числовую переменную.

3
ответ дан 24.11.2019, 12:45

Не существует функция, которую тебе возвращало бы точно число раз, что появляется стоимость в частности, но ты мог бы использовать функцию array_count_values чтобы рассказывать, сколько раз появляются все данные array.

С этого времени ты мог бы создавать твою собственную функцию:

function cuenta_veces_valor($array, $valor) {
    $contadores = array_count_values($array);
    return $contadores[$valor];
}

Хотя я представляю себе то, что, если только ты не нуждался в том, чтобы считать более одного элемента, он может быть немного чрезмерным.

1
ответ дан 24.11.2019, 12:45
  • 1
    Спасибо, он я был полезным. – Patricio Nicolas 03.11.2016, 05:50
  • 2
    Так или иначе, будь должен пробегать весь array, чтобы считать количество. S и # 243; podr и # 237; чтобы быть чрезмерным в памяти, если было много отличной стоимости. Например array(1,2,3,4,5,6,7,8,9,10,1) давать и # 237; в как оказанный array с 10 элементами для первоначального array 11. – ESL 03.11.2016, 07:30
  • 3
    Которое s и # 237; я не вижу необходимость это помещать в переменную. – ESL 03.11.2016, 07:31
  • 4
    Другая альтернатива состоит в том, чтобы делать один $i=0; foreach($array as $v) if($buscado==$v) $i++;, у которого есть использование, м и # 225; s работоспособный памяти (то, что не значит, что он лучше, так как array_count_values - funci и # 243; n урожденная PHP. – ESL 03.11.2016, 07:32
  • 5
    Сделанный, шага я решаю проблему, которой ошибки, если не существует стоимость, искавшая (когда быть должным, и # 237; чтобы возвращать 0). – ESL 03.11.2016, 08:24

Попытайся с этим:

$arr = array('amigo','Hola','amigo','amigo','samigo','amigos','que','tal','tal','tal','amigo');
$str = ", " . implode(", ",$arr) . ",";
$count = substr_count($str, ' amigo,');
echo $str."<br>";
echo $count;

Главным образом мы перемещаем договоренность в string и потом substr_count () он делает нам работу, ты увидишь, что вывода "3", так как слово "друг" появляется три раза в твоей договоренности.

ГЛАЗ, что элемент 'amigo,' равный он суммирует +1 в $count, так как у него есть запятая в конце концов, но ты не хочешь обложить налогом это, так как это элемент, отличный от 'дружелюбного' элемента, который не приносит запятую.

Имей в виду, что это могло бы быть неэффективным в управлении памяти, если ты обрабатываешь большое количество данных (ты копируешь все данные в string).

0
ответ дан 24.11.2019, 12:45
  • 1
    Спасибо, он я был полезным также. – Patricio Nicolas 03.11.2016, 05:51
  • 2
    Быть должным и # 237; схвати искать " amigo " (с местом), если ты не подвергаешься риску того, что он считает " amigos" как происшествие " amigo" (например). – Alvaro Montoro♦ 03.11.2016, 05:51
  • 3
    превосходный acotaci и # 243; n, я издаю ее. – Roberto Sepúlveda Bravo 03.11.2016, 05:55
  • 4
    Я верю в то, что для того, чтобы оно функционировало быть должным и # 237; схвати в и # 241; adir запятая сначала и конец ($str = "," . implode(",",$arr) . ",";) и потом подтверждать цепь с запятой сначала и концом tambi и # 233; n ($count = substr_count($str, ',amigo,');). Иначе, если искавшая цепь - первая или она и #250; ltima array, не считаться и # 237; в – Alvaro Montoro♦ 03.11.2016, 06:10
  • 5
    Мне кажется ужасным этот ответ, может давать место в вирусы (даже неуверенности). Если одна из стоимости включает запятую, он ты ушел совсем в joraca. Adem и # 225; s он ужасно неэффективный в управлении памяти (est и # 225; s копируя все данные в string). – ESL 03.11.2016, 07:28