Heim  >  Fragen und Antworten  >  Hauptteil

Gruppieren Sie nach Gruppe, berechnen Sie die Summe der Vorkommen jeder Gruppe und drucken Sie die Daten als formatierte Zeichenfolge aus

<p>Ich möchte die Daten einiger Zeilen basierend auf den Werten zweier Spalten gruppieren und summieren. </p> <p>Meine Eingabe ist:</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>Ich möchte die gruppierten Zeilenwerte als Zeichenfolge ausgeben, gefolgt von einem <code>x</code> und der Gesamtzahl der Vorkommen im folgenden Format: </p> <pre class="brush:php;toolbar:false;">FA 12.9x3 FB 12,2x3</pre> <p>Ich habe Code geschrieben, um das Vorkommen eines Werts in jeder Gruppe zu zählen, weiß aber nicht, wie ich ihn in diesem Format ausdrucken soll: </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]; } anders { if (!array_key_exists(strval($value[1]),$new[$value[0]])) { $new[$value[0]][strval($value[1])]=1; // $no+=1; } anders { $count= $new[$value[0]]; $count=$count[strval($value[1])]; $count+=1; $new[$value[0]][strval($value[1])]=$count; } } }</pre> <p>Kann dieser Code optimiert und im richtigen Format gedruckt werden? </p> <p>Gewünschte Ausgabe: </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粉970736384P粉970736384433 Tage vor483

Antworte allen(1)Ich werde antworten

  • P粉323050780

    P粉3230507802023-09-06 09:57:01

    使用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
            )
    
    )

    Antwort
    0
  • StornierenAntwort