valores tipos repetidos length elementos contar array_count_values array php facebook-graph-api multidimensional-array count find-occurrences

tipos - php length array



Contar las apariciones de un valor en una columna de una matriz de matrices de objetos (4)

Intenta con:

$input = array( /* your data */ ); $count = 0; foreach ( $input as $value ) { if ( $value->type == ''photo'' ) { $count++; } }

Alguien sabe cómo contar las apariciones de "foto" en esta matriz:

Array ( [0] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-03-02T07:58:23+0000 ) [1] => stdClass Object ( [type] => photo [id] => 14047818930362 [created_time] => 2012-03-01T14:58:53+0000 ) [2] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-03-01T09:49:40+0000 ) [3] => stdClass Object ( [type] => status [id] => 14047818930362 [created_time] => 2012-03-01T09:36:04+0000 ) [4] => stdClass Object ( [type] => photo [id] => 14047818930362 [created_time] => 2012-02-28T07:03:25+0000 ) [5] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-02-27T09:15:34+0000 ) [6] => stdClass Object ( [type] => photo [id] => 14047818930362 [created_time] => 2012-02-27T07:32:13+0000 ) [7] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-25T09:36:57+0000 ) [8] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-02-23T08:46:43+0000 ) [9] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-22T21:04:30+0000 ) [10] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-21T20:38:27+0000 ) [11] => stdClass Object ( [type] => photo [id] => 1404781893036 [created_time] => 2012-02-21T07:22:44+0000 ) [12] => stdClass Object ( [type] => status [id] => 14047818930362 [created_time] => 2012-02-20T08:32:46+0000 ) [13] => stdClass Object ( [type] => status [id] => 1404781893036 [created_time] => 2012-02-17T15:00:11+0000 ) )


Me gustaría reconocer que el método de Dor Shemer es (IMO) el método más directo, limpio, legible y confiable. Solo quiero ofrecer algunas alternativas para aquellos que prefieren usar la programación funcional ... array_reduce() es un segundo para mí. Finalmente, quiero identificar un pequeño Gotcha para los métodos que usan array_count_values() - por favor lea en ...

Batería de Métodos: ( Demo )

$photo_count=0; // establish default value foreach($array as $objects){ if($objects->type===''photo'') ++$photo_count; // pre-increment } echo "foreach result = $photo_count"; echo "array_reduce = ",array_reduce($array,function($carry,$objects){return $carry+($objects->type===''photo''?1:0);},0); echo "array_filter & count = ",sizeof(array_filter($array,function($objects){return $objects->type===''photo'';})); echo "array_column & array_filter & count = ",sizeof(array_filter(array_column($array,''type''),function($v){return $v===''photo'';})); echo "array_map & array_count_values & array_replace = ",array_replace([''photo''=>0],array_count_values(array_map(function($o) {return $o->type;}, $array)))[''photo'']; echo "array_map & array_count_values (gives Notice) = ",array_count_values(array_map(function($o) {return $o->type;}, $array))[''photo''];

Entrada / Salida usando datos de muestra de OP (sin problemas):

$array=[ (object)[''type''=>''photo'',''id''=>1404781893036,''created_time''=>''2012-03-02T07:58:23+0000''], (object)[''type''=>''photo'',''id''=>14047818930362,''created_time''=>''2012-03-01T14:58:53+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-03-01T09:49:40+0000''], (object)[''type''=>''status'',''id''=>14047818930362,''created_time''=>''2012-03-01T09:36:04+0000''], (object)[''type''=>''photo'',''id''=>14047818930362,''created_time''=>''2012-02-28T07:03:25+0000''], (object)[''type''=>''photo'',''id''=>1404781893036,''created_time''=>''2012-02-27T09:15:34+0000''], (object)[''type''=>''photo'',''id''=>14047818930362,''created_time''=>''2012-02-27T07:32:13+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-25T09:36:57+0000''], (object)[''type''=>''photo'',''id''=>1404781893036,''created_time''=>''2012-02-23T08:46:43+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-22T21:04:30+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-21T20:38:27+0000''], (object)[''type''=>''photo'',''id''=>1404781893036,''created_time''=>''2012-02-21T07:22:44+0000''], (object)[''type''=>''status'',''id''=>14047818930362,''created_time''=>''2012-02-20T08:32:46+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-17T15:00:11+0000''] ]; // output: foreach result = 7 array_reduce = 7 array_filter & count = 7 array_column & array_filter & count = 7 array_map & array_count_values & array_replace = 7 array_map & array_count_values = 7

Entrada / Salida usando datos sin valores de photo (problema con el array_count_values() 2nd array_count_values() ):

$array=[ (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-03-01T09:49:40+0000''], (object)[''type''=>''status'',''id''=>14047818930362,''created_time''=>''2012-03-01T09:36:04+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-25T09:36:57+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-22T21:04:30+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-21T20:38:27+0000''], (object)[''type''=>''status'',''id''=>14047818930362,''created_time''=>''2012-02-20T08:32:46+0000''], (object)[''type''=>''status'',''id''=>1404781893036,''created_time''=>''2012-02-17T15:00:11+0000''] ]; // or if there are no object rows like: $array=[]; // output: foreach result = 0 array_reduce = 0 array_filter & count = 0 array_column & array_filter & count = 0 array_map & array_count_values & array_replace = 0 array_map & array_count_values (gives Notice) = <br /> <b>Notice</b>: Undefined index: photo in <b>[...][...]</b> on line <b>43</b><br />

array_count_values() no se molesta en generar elementos con un recuento de 0 .


Para contar la ocurrencia coincidente de una cadena en una matriz multidimensional, deberá iterar sobre cada elemento de la matriz y coincidir con la cadena e incrementar el conteo. Al igual que @Dor ha sugerido.

$count = 0; foreach ($array as $item) { if ($item->type === ''photo'') { $count++; } }

Si quieres lograr lo mismo en una matriz unidimensional, entonces es bastante sencillo. Puede usar la función de matriz PHP array_count_values como se explica a continuación.

<?php $array = array(1, "test", 1, "php", "test"); print_r(array_count_values($array)); ?>

El ejemplo anterior dará como resultado:

Array ( [1] => 2 [test] => 2 [php] => 1 )


$count = 0; foreach ($array as $item) { if ($item->type === ''photo'') { $count++; } }