Raggruppare valori array

Riccardo Contu

Utente Attivo
14 Lug 2019
23
0
1
Buongiorno,

ho una domanda su come raggrupare in un array alcuni valori inseriti tramite input text e checkbox. In un form precedente si definisce il valore di $n che è un valore numerico. Nel seguente form invece vengono visualizzati n volte i campi in cui inserire i valori. I checkbox possono essere selezionati tutti, alcuni o nessuno.

PHP:
<form action='form.php' method='post'>

$i= 0;
      while($i < $n){
      $n = $i+1;
    
      echo "
      <input name='nome[]' type='text' >

      <input name='valore[]' value='bianco' type='checkbox'>

      <input name='valore[]' value='rosso' type='checkbox'>

      <input name='valore[]' value='nero' type='checkbox'>

     ";         

$i++;
}
</form>
Supponiamo che $n = 2
Avremo come valori inseriti:

nome = nome1
valore = bianco
valore = rosso

nome = nome2
valore = rosso
valore = nero

A questo vorrei stampare a video i risultati in questo modo:

nome1 bianco rosso
nome2 rosso nero

Sto provando in questo modo:

Codice:
$i= -1;
while($i < $n){
$numero = $i+1;
echo "
$nome[$n] $valore[$n]
";
$i++;
}
ma ottengo come risultato: nome1 nome2 bianco rosso rosso nero

Vorrei che i risultati di valore venissero raggruppati in base a nome1 e nome2 e non stampati tutti di seguito. Potreste darmi una mano?
 

Riccardo Contu

Utente Attivo
14 Lug 2019
23
0
1
Facendo un print_r dei 2 array ottengo questo

Codice:
Array ( [0] => nome1 [1] => nome2 )

Array ( [0] => bianco [1] => rosso [2] => rosso [3] => nero )
A me serve che

a nome1 venga associato bianco, rosso
a nome2 venga associato rosso, nero

Tenendo presente che a nome1 e nome2 possano essere associati anche piu' di 2 valori o anche solo 1
 

WmbertSea

Utente Attivo
28 Nov 2014
194
30
28
Ciao, prova ad usare degli array multidimensionali.

Nel codice html dovrai indicare gli indici nel name in un modo del genere:
PHP:
<form action='form.php' method='post'>
<?php
$n= 2;
$i= 0;
while($i < $n){
  echo "
  <input name='nome[$i]' type='text' >
  <input name='valore[$i][0]' value='bianco' type='checkbox'>
  <input name='valore[$i][1]' value='rosso' type='checkbox'>
  <input name='valore[$i][2]' value='nero' type='checkbox'>
  ";
  $i++;
}
?>
  <input type="submit" value="Vai">
</form>
Nota che la variabile "valore" ha due dimensioni dove il primo indice corrisponde a quello della relativa variabile "nome" mentre il secondo indica praticamente il gruppo di valori per quel determinato nome. Il secondo indice potrebbe anche essere rappresentato da dei nomi di variabile, anziché dei valori numerici.

Su form.php puoi quindi avere una roba del genere per elaborare tali dati:
Codice:
<?php
$nome = $_POST["nome"];
$valore = $_POST["valore"];

$i = 0;
while($i < count($nome)){
  echo $nome[$i] . ": " . implode(", ", $valore[$i]) . "<br>";
  $i++;
}
?>
Nota che ogni elemento dell'array $valore è di per se un array. Ho usato quindi la funzione implode per restituire ciascuno dei gruppi di valori relativi ad ogni elemento $valore (e quindi ad ogni nome).

Vedi se può andare, fai sapere.
 

Riccardo Contu

Utente Attivo
14 Lug 2019
23
0
1
Direi che funziona alla perfezione! Ho provato anche con più di 2 valori sull'array nome e valori multipli su valore e vengono raggruppati tutti correttamente. Grazie!