подсчитать количество вхождений каждого элемента в массив (в php) - PullRequest
0 голосов
/ 21 января 2020

Я хочу количество вхождений каждого элемента в массиве. Примечание: Я не могу использовать встроенную функцию, например array_count_values ​​()

, вот что я попробовал.

$a = ['a','b','a','c','a','d'];

$output = [];

for ($i = 0; $i <= count($a);$ i++) {
    $count = 1;
    for($j = $i + 1; $j < count($a); $j++) {
        if ($a[$i] == $a[$j]) {
            $count++;
            $output[$a[$i]] = $count;
        }
    }
}

print_r($output);

Ответы [ 3 ]

2 голосов
/ 21 января 2020

В PHP7 вы можете использовать оператор объединения NULL , чтобы упростить этот код:

$a=['a','b','a','c','a','d'];

$output=[];

foreach ($a as $v) {
    $output[$v] = ($output[$v] ?? 0) + 1;
}

print_r($output);

Вывод:

Array
(
    [a] => 3
    [b] => 1
    [c] => 1
    [d] => 1
)

Демонстрация включена 3v4l.org

1 голос
/ 21 января 2020
<?php
$items=['a','b','a','c','a','d'];

foreach($items as $item) {
    $result[$item] ??= 0;
    $result[$item]  += 1;
}

var_dump($result);

Выход:

array(4) {
  ["a"]=>
  int(3)
  ["b"]=>
  int(1)
  ["c"]=>
  int(1)
  ["d"]=>
  int(1)
}
1 голос
/ 21 января 2020

Как уже упоминалось в комментариях, array_count_values ​​() является оптимальным решением в php. Но вы должны написать это, также показать ваше понимание того, как искать в массиве, это довольно просто.

$a=['a','b','a','c','a','d'];
$output=[]; 

for($i = 0; $i < count($a); $i++){
    if(!isset($output[$a[$i]])){
      $output[$a[$i]] = 1;
    }

    else{
        $output[$a[$i]] = $output[$a[$i]] + 1;
    }
}

var_dump($output);

//output
array(4) {
  ["a"] => int(3)
  ["b"] => int(1)
  ["c"] => int(1)
  ["d"] => int(1)
}
...