按群組分組,計算每組出現次數總和,並以格式化字串列印數據
P粉970736384
P粉970736384 2023-09-05 22:43:27
0
1
482
<p>我想根據兩個列的值對一些行的資料進行分組和求和。 </p> <p>我的輸入是:</p> <pre class="brush:php;toolbar:false;">$array = [ ['FA',12.9], ['FA',12.9], ['FB',12.2], ['FC',12.3], ['FA',12.9], ['FB',12.9], ['FA',12.4], ];</pre> <p>我想將分組後的行值印成字串,然後是<code>x</code>和出現的總次數,格式如下:</p> <pre class="brush:php;toolbar:false;">FA 12.9x3 FB 12.2x3</pre> <p>我已經寫了程式碼來計算每個組中值的出現次數,但是我不知道如何以這種格式列印出來:</p> <pre class="brush:php;toolbar:false;">$new = []; foreach ($array as $key=> $value) { if (!array_key_exists($value[0],$new)) { $new[$value[0]]=[strval($value[1])=>1]; } else { if (!array_key_exists(strval($value[1]),$new[$value[0]])) { $new[$value[0]][strval($value[1])]=1; // $no =1; } else { $count= $new[$value[0]]; $count=$count[strval($value[1])]; $count =1; $new[$value[0]][strval($value[1])]=$count; } } }</pre> <p>這個程式碼可以優化並以正確的格式列印出來嗎? </p> <p>期望的輸出:</p> <pre class="brush:php;toolbar:false;">FA 12.9x3 FB 12.2x1 FC 12.3x1 FB 12.9x1 FA 12.4x1</pre></p>
P粉970736384
P粉970736384

全部回覆(1)
P粉323050780

使用array_reduce以一種特殊而有用的方式,我們可以按名稱將項目分組。然後再按值進行分組併計數。這個想法是傳遞一個累積值作為鍵的陣列。

$g = array($a, $b, $c, $d, $e, $f, $h);

$result = array_reduce($g, function ($carry, $item) {
    $key = $item[0];
    $value = $item[1];
    if (!isset($carry[$key])) {
        $carry[$key] = [];
    }
    if (!isset($carry[$key][(string) $value])) {
        $carry[$key][(string) $value] = 0;
    }
    $carry[$key][(string) $value]++;
    return $carry;
}, []);

print_r($result);

輸出:

Array
(
    [FA] => Array
        (
            [12.9] => 3
            [12.4] => 1
        )

    [FB] => Array
        (
            [12.2] => 1
            [12.9] => 1
        )

    [FC] => Array
        (
            [12.3] => 1
        )

)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!