2017-09-14 63 views
0

从一个REST API的总计数,我通过使用PHP中,一个foreach内具有多值的键()循环

$return= json_decode($response, true); 

转换JSON数据到阵列数据有2个值相同的密钥内的每个阵列,例如:

['some1']=>array(
    [0]=> array(['data']=>0) 
    [1]=> array(['data']=>1) 
) 

.. 我做一个for循环来显示,其中所述结果是0或1。现在我想计数['data']内的总0或1的['data']值整个阵列。我怎样才能做到这一点?
这是我的for循环看起来像:

for ($i = 0; $i < count($return['some1']); $i++){ 
    echo $return['some1'][$i]['data'] ."<br/>" ;} 

回波显示:

0 
1 

感谢,

+1

你需要总共0 + 1 + 1等......或者你需要知道有多少个1? – VA79

+1

虽然这不是同一个数字,@ VA79?所有'1'的计数与所有'1'的总和相同。 – Qirel

+0

@Qirel你也可以计算所有的1,然后乘以1得到总和。 :D –

回答

1

只需提取data列并对其值进行计数。关键将包含值(0或1)和值将包含数:

$counts = array_count_values(array_column($return['some1'], 'data')); 
echo $counts[0]; // return the count of 0s 
echo $counts[1]; // return the count of 1s 

如果你有在那里2S然后$counts[2]将包含他们等的个性化......

+0

感谢AbraCadaver,您的解决方案也是如此。 :-) – callmejoejoe

1
$count_0 = 0; 
$count_1 = 0; 
for ($i = 0; $i < count($return['some1']); $i++){ 
    if ($return['some1'][$i]['data'] == 0) { 
     $count_0++; 
    } 
    if ($return['some1'][$i]['data'] == 1) { 
     $count_1++; 
    } 
} 
echo $count_0; 
echo '<br/>'; 
echo $count_1; 
+0

非常感谢Abhisek Bera,确实的确如此:-) – callmejoejoe

0

如果你想知道有多少次“数据的每个值'重复你可以使用类似下面的东西来跟踪:

// Your input data 
$data = array(
    'some1' => array(
     array('data' => 0), 
     array('data' => 1), 
     array('data' => 1), 
     array('data' => 1), 
     array('data' => 0) 
    ) 
); 

// Store the result 
$result_array = array(); 

// Count each unique value for 'data' 
foreach ($data['some1'] as $key => $value) { 
    if (! isset($result_array[$value['data']])) { 
     $result_array[$value['data']] = 0; 
    } 
    $result_array[$value['data']]++; 
} 

// Display unqiue results & their respective counts 
print_r($result_array); 

示例:https://eval.in/862097

+0

我明白了,我很佩服你使用foreach-loop而不是for-loop,但是你的解决方案是打印一个数组而不是一个数字。然而,您上面的解决方案会返回一个我需要的数字。你可以改变你的代码来返回一个数字的总数? – callmejoejoe