【问题标题】:Dynamic Mutidimensional array value Count using php使用php动态多维数组值计数
【发布时间】:2018-05-16 09:58:38
【问题描述】:

我正在尝试计算多维数组中的数组值以获得以下数组值。

$allMultiGridRes = Array
(
    [0] => Array
        (
            [1] => Array
                (
                    [1] => grid multi col1
                    [2] => grid multi col2
                )
            [2] => Array
                (
                    [1] => grid multi col1
                )
        )
    [1] => Array
        (
            [1] => Array
                (
                    [1] => grid multi col1
                    [2] => grid multi col2
                )
            [2] => Array
                (
                    [1] => grid multi col1
                    [2] => grid multi col2
                )
        )
    [2] => Array
        (
            [1] => Array
                (
                    [1] => grid multi col1
                    [2] => grid multi col2
                )
            [2] => Array
                (
                    [1] => grid multi col1
                    [2] => grid multi col2
                )
        )
)

我期待以下输出。

Array
(
    [1] => Array
        (
            [grid multi col1] => 3
            [grid multi col2] => 3
        )
    [2] => Array
        (
            [grid multi col1] => 3
            [grid multi col2] => 2
        )
)

我使用for loop 尝试了以下方法,但无法实现上述输出。

$allMultiGridRes =array();
$paramCheck =array();
foreach ($allMultiGridRes as $gMKey => $GMvalue){
    if(!empty($GMvalue)){
        foreach ($GMvalue as $gMKey2 => $gMValue2){
            if(!empty($gMValue2)){
                $allGridCount[$gMKey2] = array_count_values($gMValue2);
                foreach ($gMValue2 as $gMKey3 => $gMValue3){
                    $paramCheck = !empty($allGridCount[$gMKey2])?$allGridCount[$gMKey2]:array();
                    $GMindex1 = $gMValue3;
                    $allGridCount[$gMKey2][$GMindex1] = array_key_exists($GMindex1,$paramCheck) ? $allGridCount[$gMKey2][$GMindex1]++ : 1;
                    }
                }
            }
        }
    }
}

使用此方法,我得到以下输出,但值未按预期计算。

Array
(
    [1] => Array
        (
            [grid multi col1] => 1
            [grid multi col2] => 1
        )
    [2] => Array
        (
            [grid multi col1] => 1
            [grid multi col2] => 1
        )
)

我对建议持开放态度,我也尝试了很多方法,但仍然无法实现。卡在这里很久了

提前致谢。

【问题讨论】:

  • 请分享现场演示,或分享php代码中的数据示例
  • 不确定您如何计算它们。为什么不应该计算 [0]?在 [1] 中,我数 2 col1 和 2 col1,你说各有 3 个?
  • @C2486 你的意思是 var_export?
  • $allMultiGridRes 的php代码,它有助于在我们身边运行
  • @Prashanth:Bhai 我说的是在 php 中形成的这个数组,Alive to Die 在这里给出:eval.in/1004977

标签: php arrays codeigniter for-loop


【解决方案1】:

您可以使用array_reduceforeach

$allMultiGridRes = ;//Your array

$result = array_reduce($allMultiGridRes, function($c, $v){
    foreach ( $v as $key => $value ) {
        if ( !isset( $c[$key] ) ) $c[$key] = array();

        foreach( $value as $o ) {
            if ( !isset( $c[$key][$o] ) ) $c[$key][$o] = 0;
            $c[$key][$o]++;
        }
    }
    return $c;
},array());

print_r( $result );

这将导致:

Array
(
    [1] => Array
        (
            [grid multi col1] => 3
            [grid multi col2] => 3
        )

    [2] => Array
        (
            [grid multi col1] => 3
            [grid multi col2] => 2
        )

)

【讨论】:

  • 很好是的,它可以工作@eddie,但关键索引计数应该以[1] ,[2]开头。
  • @Prashanth 是的,这将跟随您阵列上的键。
  • 我在我的身上使用了 0 和 1,所以这就是你得到它的原因
  • 嗨@Eddie 我怎样才能获得与以下链接中的输入相同的输出。 Demo
【解决方案2】:

您需要使用第二次foreach() 迭代key 来区分记录以及正确添加

$allGridCount = [];
foreach ($allMultigridRes as $gMKey => $GMvalue){
    if(!empty($GMvalue)){
        foreach ($GMvalue as $gMKey2 => $gMValue2){
            if(!empty($gMValue2)){
                foreach ($gMValue2 as $gMKey3 => $gMValue3){
                    $allGridCount[$gMKey2][$gMKey3][$gMValue3] = (isset($allGridCount[$gMKey2][$gMKey3][$gMValue3])) ? $allGridCount[$gMKey2][$gMKey3][$gMValue3]+1 : 1;
                }
            }
        }
    }
}
echo "<pre/>";print_r($allGridCount);

输出:-https://eval.in/1004977

注意:-不要使用!empty(),而是使用is_array() &amp;&amp; count() 来检查它是否是一个数组,并且其中有一些价值可以进一步迭代

$allGridCount = [];
foreach ($allMultigridRes as $GMvalue){
    if(is_array($GMvalue) && count($GMvalue) >0){
        foreach ($GMvalue as $gMKey2 => $gMValue2){
            if(is_array($gMValue2) && count($gMValue2) >0){
                foreach ($gMValue2 as $gMKey3 => $gMValue3){
                    $allGridCount[$gMKey2][$gMKey3][$gMValue3] = (isset($allGridCount[$gMKey2][$gMKey3][$gMValue3])) ? $allGridCount[$gMKey2][$gMKey3][$gMValue3]+1 : 1;
                }
            }
        }
    }
}
echo "<pre/>";print_r($allGridCount);

【讨论】:

    猜你喜欢
    • 2023-02-14
    • 1970-01-01
    • 2021-12-10
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多