PHP计数多维数组值

时间:2018-05-11 06:23:22

标签: php

假设我有一个数组

[
  {0:1, 1:5, 3:null},
  {0:4, 1:null, 3:null},
  {0:null, 1:5, 3:5}
]

我想算一下,所以我的预期输出是

[{0:2, 1:2, 3:1}]

我不知道如何存档,请帮忙。

2 个答案:

答案 0 :(得分:0)

步骤:

1)循环遍历数组。您将获得子阵列。

2)循环子数组,我们将得到实际的数值。

3)准备一个数组,其中键作为子数组中的数值。

4)每次在内部循环中,如果值在结果数组中作为键存在。

5)如果存在,请增加计数。

这可能是您的解决方案:

<?php
$arr = [
  [0 => 1, 1 => 5, 3 => null],
  [0 => 4, 1 => null, 3 => 2],
  [0 => null, 1 => 5, 3 => 5]
];
$out = array();
foreach ($arr as $key => $value){
    foreach ($value as $key2 => $value2){
        $index = $value2;
        if (array_key_exists($index, $out)){
            $out[$index]++;
        } else {
            $out[$index] = 1;
        }
    }
}

echo "Original array:<br/>";
echo '<pre>';print_r($arr);echo '</pre>';

echo "Counted values:<br/>";
echo '<pre>';print_r($out);echo '</pre>';
?>

输出:

原始阵列:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 5
            [3] => 
        )

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

    [2] => Array
        (
            [0] => 
            [1] => 5
            [3] => 5
        )

)

Counted values:

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

答案 1 :(得分:0)

如果你想要值的总和,虽然这确实假设所有数组都与第一行具有相同的列...

$data = '[
  {"0":1, "1":5, "3":null},
  {"0":4, "1":null, "3":2},
  {"0":null, "1":5, "3":5}
]';

$data = json_decode($data, true);
$out = array();
foreach ( array_keys($data[0]) as $key ) {
    $out[$key] = array_sum(array_column($data, $key));
}
print_r(json_encode($out));

这会查看数据的第一行并获取列的列表(使用array_keys()),然后从整个数组中提取此列的值(使用array_column())并添加这些值在一起(使用array_sum())。

输出是......

{"0":5,"1":10,"3":7}

<强>更新 问题编辑后......

$data = '[
  {"0":1, "1":5, "3":null},
  {"0":4, "1":null, "3":null},
  {"0":null, "1":5, "3":5}
]';

$data = json_decode($data, true);
$out = array();
foreach ( array_keys($data[0]) as $key ) {
    $out[$key] = 0;
    foreach ( array_column($data, $key) as $value ) {
        if ( $value )   {
            $out[$key]++;
        }
    }
}
print_r(json_encode($out));

...输出

{"0":2,"1":2,"3":1}

使用类似的原则,但只是遍历每一列并保持包含值的那些列的计数。

或更短版本......

$data = json_decode($data, true);
$out = array();
foreach ( array_keys($data[0]) as $key ) {
    $out[$key] = count(array_filter(array_column($data, $key)));
}
print_r(json_encode($out));