2015-04-23 2 views
-2

Это часть моего многомерного массива:Вывести все элементы из массива PHP и подсчитывать их вхождения

Array 
(
    [0] => Array 
     (
      [0] => 101 
      [1] => ... 
     ) 

    [1] => Array 
     (
      [0] => 102 
      [1] => ... 
     ) 

    [2] => Array 
     (
      [0] => 102 
      [1] => ... 
     ) 

    [3] => Array 
     (
      [0] => 102 
     ) 

    [4] => Array 
     (
      [0] => 300 
     ) 

    [5] => Array 
     (
      [0] => test 
     ) 

    [6] => Array 
     (
      [0] => test 
     ) 
) 

Моя цель состоит в том, чтобы получить все элементы с идентификатором [0], не повторяя одни и те же элементы, но с количеством их вхождения в скобках, как этот выход:

101 
102(3) 
30 
test(2) 

ответ

3

PHP> = 5.5.0, необходимое для array_column():

$result = array_count_values(array_column($array, 0)); 

< Для 5.5.0 заменить array_column() с:

array_map(function($v) { return $v[0]; }, $array) 

Тогда:

foreach($result as $k => $v) { 
    echo "$k ($v)"; 
} 
+0

спасибо, что мне делать, если мои элементы массива, которые я хочу подсчитать, не совпадают, но, например, 102a, 102b, 102c, и я хочу, чтобы их считали 3 случаями, возможно, какой-то preg_match? – Driver

+0

Различные способы в зависимости от данных. Для вашего примера 'return (int) $ v [0];' будет работать. – AbraCadaver

0

вы можете просто использовать print_r(array_count_values($array)); и он вернет вам количество, что у нужно.

$array = array(101, 102, 103, 103, 103, 104, 104, 105, 106, 106, 106, 106, 7); 
print_r(array_count_values($array)); 

Result: 

Array 
([1] => 1 ,[2] => 1 , [3] => 3, [4] => 2,[5] =>1, [6] => 4, [7] => 1) 
+0

Uhhh ... Кроме того, что не является репрезентативным для массива OP. – AbraCadaver

Смежные вопросы