[PHP] Raggruppare array

  • Creatore Discussione Creatore Discussione max1974
  • Data di inizio Data di inizio

max1974

Utente Attivo
7 Mar 2013
107
0
16
Salve raga ho questo quesito:
ho un array tipo questo
PHP:
{"nome":"mario","age":"33","importo":"726,98"},
{"nome":"mario","age":"35","importo":"26,00"},
{"nome":"mario","age":"40","importo":"43,02"},
{"nome":"mario","age":"41","importo":"726,98"},
{"nome":"carlo","age":"33","importo":"526,25"},
{"nome":"carlo","age":"41","importo":"6,15"}
{"nome":"carlo","age":"48","importo":"15,35"}
]
dovrei sommare il campo importo di quelli che hanno lo stesso nome ed hanno un'eta maggiore di 40....
gradirei ottenere questo...
[
{"nome":"mario","age":"33","importo":"726,98"},
{"nome":"mario","age":"35","importo":"26,00"},
{"nome":"mario","age":"","importo":"770,00"},//qui somma 43,02+726,08
{"nome":"carlo","age":"33","importo":"526,25"},
{"nome":"carlo","age":"","importo":"21,50"}//qui somma 6,15+15,35
]
Ho realizzato questo ma sono piantato....ove sbaglio ???
PHP:
$data = '[
{"nome":"mario","age":"33","importo":"726,98"},
{"nome":"mario","age":"35","importo":"26,00"},
{"nome":"mario","age":"40","importo":"43,02"},
{"nome":"mario","age":"41","importo":"726,98"},
{"nome":"carlo","age":"33","importo":"526,25"},
{"nome":"carlo","age":"41","importo":"6,15"},
{"nome":"carlo","age":"48","importo":"15,35"}
]';



$data = json_decode($data);
$data = array_filter($data);
$result = array();
foreach($data as $value) {
if (array_key_exists($value->nome,$result))
{
//controllo se esiste
echo "Key exists!";
if ($value->age >= 40)
{
//qui devo sommare importi al record già nell'array
echo "Sommare Importo ".$value->importo."<br>";
}
else
{
echo "Eta inferiore aggiungo record nome =".$value->nome."/ age=".$value->age."/ importo=".$value->importo."<br>";
$result[] = array(
'nome' => $value->nome,
'age' => $value->age,
'importo' => $value->importo
);
}
}
else
//se non esiste lo aggiungo
{
echo "Non esiste aggiungo record nome =".$value->nome."/ age=".$value->age."/ importo=".$value->importo."<br>";
$result[] = array(
'nome' => $value->nome,
'age' => $value->age,
'importo' => $value->importo
);
}
}
print_r($result);

grazie in anticipo
 
Ultima modifica di un moderatore:
@max1974
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
dai confronta tu i due script ….
ti ho lasciato tutti gli "echo" per vedere i passi intermedi
PHP:
<?PHP
require_once 'myUtils/show_vars.php';

$data = '[
{"nome":"mario","age":"33","importo":"726,98"},
{"nome":"mario","age":"35","importo":"26,00"},
{"nome":"mario","age":"40","importo":"43,02"},
{"nome":"mario","age":"41","importo":"726,98"},
{"nome":"carlo","age":"33","importo":"526,25"},
{"nome":"carlo","age":"41","importo":"6,15"},
{"nome":"carlo","age":"48","importo":"15,35"}
]';

$data = json_decode($data);
echo "<h3>json_decode</h3>". show_var( $data )."<br /><br />";

$arraySum = array();
$arrayRes = array();

foreach($data as $value) {
    $nome    = $value->nome;
    $age     = $value->age;
    $importo = str_replace(",", ".", str_replace(".", "", $value->importo));

    if ($age < 40) {
        echo "Eta inferiore - ".$nome." - ".$age." - ".$importo."<br />";

        $arrayRes[] = $value;
    }
    else {
        echo "Eta superiore - ".$nome." - ".$age." - ".$importo."<br />";

        if ( !isset($arraySum[$nome]) ) {
            $arraySum[$nome] = 0;
        }
        $arraySum[$nome] += $importo;
    }
}
echo "<h3>arrayRes</h3>". show_var( $arrayRes )."<br /><br />";
echo "<h3>arraySum</h3>". show_var( $arraySum )."<br /><br />";

foreach($arraySum as $key=>$valore) {
    $valore = str_replace(".", ",", $valore);

    echo $key." - ".$valore."<br />";

    $arrayRes[] = array(
        'nome'    => $key,
        'age'     => "",
        'importo' => $valore
    );
}
echo "<h3>arrayRes</h3>". show_var( $arrayRes )."<br /><br />";
?>

questo il risultato
upload_2019-4-12_23-38-50.png
 

Discussioni simili