用条件计算数组值

时间:2016-03-17 09:37:38

标签: php arrays

我有包含一些值的数组数据。我想要计算特定的关键值。

我的数组:

Array
(
    [0] => stdClass Object
        (
            [id] => 3
            [product_id] => 42
            [user_id] => 69
            [order_item_id] => 0
            [sku_id] => 78
            [rate] => 4 // count
            [description] => Wonderful dress.
            [is_certifiedbuyer] => 1
            [status] => 1
            [deleted] => 0
            [created_at] => 2016-03-11 16:53:31
            [updated_at] => 2016-03-11 16:53:31
            [username] => Hiral
            [productname] => Aish dress
        )

    [1] => stdClass Object
        (
            [id] => 4
            [product_id] => 42
            [user_id] => 12
            [order_item_id] => 0
            [sku_id] => 78
            [rate] => 2
            [description] => Greate dress.
            [is_certifiedbuyer] => 1
            [status] => 1
            [deleted] => 0
            [created_at] => 2016-03-11 16:53:31
            [updated_at] => 2016-03-11 16:53:31
            [username] => Admin
            [productname] => Aish dress
        )

)

从上面的阵列我想要计算总共5个评级用户,总共4个评级用户,总共3个评级等等

简而言之,我想从上面的数组计算费率字段。

我尝试过:

        $reviews=$this->ProductReviewRepo->ProductReview(42);

        $div1 = array_filter($reviews, function($review) {

            return  substr('4', $review->rate) !== false;
        });
        echo '<pre>';print_r(count($div1));
        $div2 = array_filter($reviews, function($review) {

            return substr('4', $review->rate) !== false;
        });
        echo '<pre>';print_r(count($div2));
        $div3 = array_filter($reviews, function($review) {

            return substr('3', $review->rate) !== false;
        });
        echo '<pre>';print_r(count($div3));
        $div4 = array_filter($reviews, function($review) {

            return substr('2', $review->rate) !== false;
        });
        echo '<pre>';print_r(count($div4));
        $div5 = array_filter($reviews, function($review) {

            return substr('1', $review->rate) !== false;
        });

但是我得到的错误只能计算字符串和整数值。

3 个答案:

答案 0 :(得分:2)

转换你的对象在数组中,你可以使用它:

$arr = array(array('rate'=>4,'id1'=>2),array('rate'=>4,'id1'=>4),
       array('rate'=>3,'id1'=>44));
$ids = array_map(function ($ar) {return $ar['rate'];}, $arr);
$count_array = array_count_values($ids);
print_r($count_array);

结果:

Array ( [4] => 2 [3] => 1 )

这表示您有2个评级为4的用户和1个评级为3的用户。

答案 1 :(得分:1)

我认为这会给你带来更好的表现。在循环之前声明变量$count1$count2 ....然后根据评级值继续增加相应的变量。我正在使用$value->rate,因为它们是数组中的对象。

foreach ($myArray as $key => $value) {
    switch ($value->rate) {
        case '1':
            $count1++;

            break;
        case '2':
            $count2++;

            break;
        case '3':
            $count3++;

            break;
        case '4':
            $count4++;

            break;
        case '5':
            $count5++;

            break;

        default:
            break;
    }
}

为什么表现更好

使用array_filter时,它会遍历数组。因此,当您使用多个array_filter时,您将循环多次。但是,通过这种方法,您只需在阵列上进行一次循环就可以完成它。

答案 2 :(得分:0)

你可以通过使用额外的数组来计算array_filter,如下所示。但是你需要设置&amp;获取更新$ count。

$count = array(1=>0,2=>0,3=>0,4=>0,5=>0);
array_filter($json, function($review) use (&$count) {   
      if($review->rate == 1){
        $count[1] = $count[1]+1; 
      }
      else if($review->rate == 2){
        $count[2] = $count[2]+1;

      }
      else if($review->rate == 3){
        $count[3] = $count[3]+1;
      }
      else if($review->rate == 4){
        $count[4] = $count[4]+1;
      }
      else if($review->rate == 5){
        $count[5] = $count[5]+1;
      }

    });
var_dump($count);