2016-11-16 39 views
0

我有一個數組和我試圖計數陣列中的對象的數量,其中所述對象鍵「值」不爲0計數數,其中不爲0

array (
    0 => 
    array (
    'name' => 'item[110189]', 
    'value' => '0', 
    'primary_key' => '110189', 
), 
    1 => 
    array (
    'name' => 'item[110190]', 
    'value' => '50', 
    'primary_key' => '110190', 
), 
    2 => 
    array (
    'name' => 'item[110191]', 
    'value' => '0', 
    'primary_key' => '110191', 
), 
    3 => 
    array (
    'name' => 'item[110192]', 
    'value' => '0', 
    'primary_key' => '110192', 
), 
) 

我試過以下內容:

$input_items = array_filter($request->items, function($item){ 

      $count = 0; 

      foreach($item as $i){ 
       if(! $i['value'] == 0){ 
        $count = $count + 1; 
       } 
      } 

      return $count; 
     }); // it will return an array 

     return $input_items; 

我得到一個錯誤,說無效對象的'值',說實話我一半的預期。

+1

你能與陣列的'var_export'版本更新您的問題嗎? –

+1

'! $ i ['value'] == 0' to'$ item ['value']!= 0'並且在回調'$ item ['value']'不需要更多循環,刪除foreach – JustOnUnderMillions

+1

@PraveenKumar謝謝 - 不錯的提示 –

回答

1

這種方式改變了它:

$input_items = array_filter($arr, function ($item) { 
    return ($item['value'] != 0); 
}); 

全碼

<?php 
$arr = array (
    0 => 
    array (
    'name' => 'item[110189]', 
    'value' => '0', 
    'primary_key' => '110189', 
), 
    1 => 
    array (
    'name' => 'item[110190]', 
    'value' => '50', 
    'primary_key' => '110190', 
), 
    2 => 
    array (
    'name' => 'item[110191]', 
    'value' => '0', 
    'primary_key' => '110191', 
), 
    3 => 
    array (
    'name' => 'item[110192]', 
    'value' => '0', 
    'primary_key' => '110192', 
), 
); 
$input_items = array_filter($arr, function ($item) { 
    return ($item['value'] != 0); 
}); 

print_r($input_items); 

輸出只具有非零項:

Array 
(
    [1] => Array 
     (
      [name] => item[110190] 
      [value] => 50 
      [primary_key] => 110190 
     ) 

) 

演示:http://ideone.com/LUbMSb

1

您可以使用array_reduce

print array_reduce($request->items, function($carry ,$item){ 
    if($item['value'] != 0){ 
     $carry++; 
    } 
    return $carry; 
    },0);