20

Czy ktoś wie jak policzyć wystąpień „zdjęcie” w tej tablicy:zliczania wystąpień wartości w kolumnie tablicy tablic obiektów

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)) 

Odpowiedz

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

Spróbuj z:

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

Aby zliczyć pasujące wystąpienie ciągu w tablicy wielowymiarowej, konieczne będzie iterowanie po każdym elemencie tablicy i dopasowanie ciągu znaków oraz zwiększenie liczby. Podobnie @Dor zasugerował

Jeśli chcesz osiągnąć to samo w jednowymiarowej tablicy, to jest to całkiem proste. Możesz użyć funkcji tablic PHP array_count_values, jak wyjaśniono poniżej.

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

Powyższy przykład wyświetli:

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

Iteruj przez tablicę i zwiększaj ctrPhoto, gdy napotkasz typ = "zdjęcie" –

+2

To powinna być poprawna odpowiedź, ponieważ jest prostsza i unikaj ręcznej iteracji. – JDuarteDJ

+2

Ta odpowiedź nie jest specyficzna dla pytania OP, podczas gdy Dor Shemer specjalnie zaspokaja jego potrzeby odpowiedź na to pytanie, stąd jego akceptowana odpowiedź. Niezależnie od tego, odpowiedź na pytanie, dlaczego szukam SOF w tej chwili, jest tym +1. – Jacksonkr

2

Chciałbym potwierdzić, że metoda jest przez Dor Szemera (IMO) najbardziej bezpośredni, czysty, czytelny i niezawodny sposób. Chcę tylko zaoferować kilka alternatyw dla tych, którzy wolą używać programowania funkcjonalnego ... array_reduce() jest dla mnie bliski. Na koniec, chciałbym wskazać małą Gotcha dla metod wykorzystujących array_count_values() - proszę czytać dalej ...

akumulatora Metod (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']; 

wejścia/wyjścia przy użyciu przykładowych danych OP (bez kłopotów):

$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 

wejścia/wyjścia przy użyciu danych bez wartości photo (kłopoty z 2 array_count_values() metody):

$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() nie zajmuje się generowaniem elementów o liczbie 0.

Powiązane problemy