20

Кто-нибудь знает, как считать вхождения «фото» в этом массиве:граф вхождений значения в столбце массива массивов объектов

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

ответ

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

Попробуйте с:

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

Чтобы подсчитать совпадение строки в многомерном массиве, вам необходимо выполнить итерацию по каждому элементу массива и сопоставить строку и увеличить счетчик. @Dor вывести так предложил

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

Если вы хотите достичь же в одномерный массив, то это довольно просто. Вы можете использовать функцию массива array_count_values PHP, как описано ниже.

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

Приведенный выше пример выведет:

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

Перейдите через массив и добавьте ctrPhoto всякий раз, когда встречается тип = 'фото'. –

+2

. Это должен быть правильный ответ, потому что это проще и избежать ручной итерации. – JDuarteDJ

+2

Этот ответ не является специфическим для вопроса OP, тогда как Дор Шемер специально обслуживал его ответ на вопрос, почему он является принятым ответом. Несмотря на это, ответ на вопрос, почему я ищу SOF прямо сейчас, это тот, что +1. – Jacksonkr

2

Я хотел бы отметить, что метод, Дор Шемер является (ИМО) самый прямой, чистый, читаемый и надежный метод. Я просто хочу предложить несколько альтернатив тем, кто предпочитает использовать функциональное программирование ... array_reduce() - вторая секунда для меня. Наконец, я хочу, чтобы определить небольшой Гоча для методов, использующих array_count_values() - пожалуйста, читайте дальше ...

батареи методов: (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']; 

ввода/вывода с использованием выборочных данных OP в (без проблем):

$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 

ввода/вывода с использованием данных без каких-либо значений photo (проблема с 2-го 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() не удосуживается генерировать элементы с подсчетом 0.

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