[PHP] individuare chiave elemento array

samurai.sette

Utente Attivo
17 Dic 2015
235
6
18
Ciao a tutti. Come da titolo mi chiedevo come individuare la chiave di uno o più elementi presenti in un array.
Mi spiego. Nel mio form ho inserito una serie di checkbox contenenti i nomi delle colonne di una tabella. Dopo che l'utente ha selezionato una o più checkbox, come faccio a individuare le relative chiavi nell'array?
Le checkbox le ho inserire in questo modo
PHP:
        $query_colonne = mysqli_query ($con, "show columns from tabella");
        
        while ($result_colonne = mysqli_fetch_array($query_colonne))
        {
            $nomi_colonne[] = $result_colonne[0];
        }
        $num_colonne = count($nomi_colonne);
        for ($i=0; $i<$num_colonne; $i++)
        {
            echo '<input type="checkbox" name="colonne[]" id="colonne" value="'.$nomi_colonne[$i].'" />' . $nomi_colonne[$i] . "<br />";
        }
Ciao, grazie mille!
 
io di solito faccio così
PHP:
$i = 0;
while (isset($_POST['colonne'][$i])) {

  $i++;
}
 
PHP:
$conn=new mysqli('host','user','pass','db');
$colonne=$conn->query('show columns from tabella')->fetch_all(MYSQLI_ASSOC);
foreach (array_keys($colonne[0]) as $items){
   echo '<input type="checkbox" name="colonne[]" id="colonne" value="'.items.'" />' . items . "<br />";
}
 
Ciao a tutti, scusate se non ho risposto subito ma il lavoro mi prende un pò di tempo.
Ho visto le voste soluzioni ma non vanno bene perchè quando seleziono uno o più checkbox le chiavi dell'array sono errate.
Faccio un esempio: se seleziono le checkbox n° 3-5-6-8, le chiavi dell'array che ottengo sono 0-1-2-3. Invece dovrei ottenere 3-5-6-8.
 
Quindi l'estrazione no da DB, ma input allora hai formulato la domanda in modo ambiguo...
effettua il loop sulle check e identifica i valori no le chiavi....
Faccio un esempio: se seleziono le checkbox n° 3-5-6-8, le chiavi dell'array che ottengo sono 0-1-2-3. Invece dovrei ottenere 3-5-6-8.
Quindi
PHP:
$col=[];
foreach($colonne as $k=>$v){
                   //$k è la chiave dell'array "colonne" preso da input per intenderci 0,1,2,3...
     $col[]=$v; // $v è il valore della selezione che rispecchia quanto richiesto:  3,5,6,7,8
}
print_r($col);
 
Ciao a tutti, richiedo scusa per la lentezza nel rispondere.
Provo a rispiegare il problema che ho in quanto non penso di averlo esposto a dovere. Quello che devo fare è questo.
Devo estrarre da una tabella i nomi di tutte le colonne e le devo inserire in una serie di checkbox. Per fare ciò faccio in questo modo:
PHP:
$query_colonne = mysqli_query ($con, "show columns from tabella");
while ($result_colonne = mysqli_fetch_array($query_colonne))
{
  $nomi_colonne[] = $result_colonne[0];
}

$num_colonne = count($nomi_colonne);
for ($i=0; $i<$num_colonne; $i++)
{
  echo '<input type="checkbox" name="colonne[]" id="colonne" value="'.$nomi_colonne[$i].'" />' . $nomi_colonne[$i] . "<br />";
}

Quando l'utente sceglie uno o più checkbox (ad esempio checkbox n. 2,4,7,9) come faccio ad individuare le chiavi degli elementi scelti?
Le soluzioni che mi avete proposto non vanno bene perchè invece di ottenere le chiavi delle checkbox n. 2,4,7,9 ottengo le chiavi n. 0,1,2,3.
Ciao, grazie mille
 
Ok allora il problema è sull'input....
Questo problema è dato dalla mancanza di indice su colonne[];
PHP:
echo '<form method="post">';
foreach ($res as $items){
   echo '<input type="checkbox" name="colonne[]" id="colonne" value="'.$items.'" />' . $items . "<br />";
}
echo '<button type="submit">Invia</button>';
echo '</form>';

if(!empty($_POST))print_r($_POST);
OUTPUT ERRATO
Codice:
Array ( [0] => id [1] => name [2] => url [3] => method [4] => backend )
id
name
url
method
backend
Array ( [colonne] => Array ( [0] => name [1] => url ) )


Per gestire come ti serve modifica in questo modo....
PHP:
echo '<form method="post">';
foreach ($res as $k=>$items){
  //viene aggiunto l'indice su $colonne[$k]
   echo '<input type="checkbox" name="colonne['.$k.']" id="colonne" value="'.$items.'" />' . $items . "<br />";
}
echo '<button type="submit">Invia</button>';
echo '</form>';

if(!empty($_POST))print_r($_POST);
OUTPUT CORRETTO
Codice:
Array ( [0] => id [1] => name [2] => url [3] => method [4] => backend )
id
name
url
method
backend
Array ( [colonne] => Array ( [1] => name [2] => url ) )
Sappi che stai rendendo posizionale l'input e non è forse la soluzione ottima! Buon lavoro
 

Discussioni simili