Regroupez par groupe, calculez la somme des occurrences de chaque groupe et imprimez les données sous forme de chaîne formatée
P粉970736384
P粉970736384 2023-09-05 22:43:27
0
1
508
<p>Je souhaite regrouper et additionner les données de certaines lignes en fonction des valeurs de deux colonnes. </p> <p>Mon entrée est :</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], ];≪/pré> <p>Je souhaite imprimer les valeurs de lignes groupées sous forme de chaîne, suivies d'un <code>x</code> et du nombre total d'occurrences, au format suivant : </p> <pre class="brush:php;toolbar:false;">FA 12.9x3 FB 12,2x3</pré> <p>J'ai écrit du code pour compter les occurrences d'une valeur dans chaque groupe, mais je ne sais pas comment l'imprimer dans ce format : </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]; } autre { if (!array_key_exists(strval($value[1]),$new[$value[0]])) { $new[$value[0]][strval($value[1])]=1; // $non+=1; } autre { $count= $nouveau[$value[0]]; $count=$count[strval($value[1])]; $compte+=1 ; $new[$value[0]][strval($value[1])]=$count; } } }</pré> <p>Ce code peut-il être optimisé et imprimé dans le bon format ? </p> <p>Sortie souhaitée : </p> <pre class="brush:php;toolbar:false;">FA 12.9x3 FB 12,2x1 FC 12,3x1 FB12,9x1 FA 12,4x1</pré></p>
P粉970736384
P粉970736384

répondre à tous(1)
P粉323050780

Utilisation array_reduceD'une manière spéciale et utile, nous pouvons regrouper les projets par nom. Regroupez ensuite par valeur et comptez. L'idée est de transmettre un tableau avec les valeurs accumulées comme clés.

$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);

Sortie :

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

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

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

)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal