[PHP] Problema inserimento nuove chiavi in array

  • Creatore Discussione Creatore Discussione pierPHP
  • Data di inizio Data di inizio

pierPHP

Nuovo Utente
17 Mar 2018
3
0
1
Ciao a tutti, ho gia incontrato il primo problema...
Ho scritto questo codice che nelle mie intenzioni dovrebbe inserire una nuova chiave in coda in un array.
Alla prima esecuzione funziona come dovrebbe e aggiunge la chiave nuova, il problema è che quando ricarico la pagina (suppongo sia il modo corretto per rieseguire il codice...): non aggiunge più altre chiavi come mi aspetto che dovrebbe fare.
Non riesco a capire dove sbaglio.

PHP:
<?php
$array = ['chiave1' => 'xxx', 'chiave2' => 'xxx', 'chiave3' => 'xxx'];

print_r($array);
echo "<br><br>";

$chiave = 'chiave';
$numero = 1;
$trova = $chiave.$numero;
echo "Inizio da ".$trova."<br>";

while (array_key_exists($trova, $array)) {
  echo $trova." esiste gia<br>";
  $numero++;
  $trova = $chiave.$numero;
}
$numero--;
$trova = $chiave.$numero;
echo "Trovato fino a ".$trova."<br><br>";
$numero++;
$trova = $chiave.$numero;
$array[$trova] = 'xxx';

echo "Aggiunto ".$trova."<br><br>";
print_r($array);
echo "<br><br>";
?>
 
Il codice esegue correttamente le tue direttive.... se necessiti che la coda sia incrementata, dovresti far uso di un db o in alternativa memorizzarti l'array in un file.... altrimenti è ovvio che l'array iniziale è quello e viene aggiunta solo una chiave....
In alternativa potresti memorizzarti il todo in sessioni, così potresti effettuare il merge degli array....
Modificando solo la parte iniziale....
PHP:
session_start();

$array = ['chiave1' => 'xxx', 'chiave2' => 'xxx', 'chiave3' => 'xxx'];
if(!empty($_SESSION)){
    $array=array_merge($array,$_SESSION);
}


print_r($array);
echo "<br><br>";

$chiave = 'chiave';
$numero = 1;
$trova = $chiave.$numero;
echo "Inizio da ".$trova."<br>";

while (array_key_exists($trova, $array)) {
    echo $trova." esiste gia<br>";
    $numero++;
    $trova = $chiave.$numero;
}
$numero--;
$trova = $chiave.$numero;
echo "Trovato fino a ".$trova."<br><br>";
$numero++;
$trova = $chiave.$numero;
$array[$trova] = 'xxx';
$_SESSION[$trova]='xxx';

echo "Aggiunto ".$trova."<br><br>";
print_r($array);
echo "<br><br>";
 
  • Like
Reactions: pierPHP
Grazie per la risposta Macus_adi, si è vero in effetti era abbastanza ovvio, come l'avevo scritto inizialmente ripartiva sempre dall'array originale di tre elementi...
L'ho riscritto anche con la soluzione del file di appoggio come mi hai consigliato, non è elegante come la soluzione delle sessioni che hai postato tu però funziona correttamente anche così.
PHP:
<?php
$array = [];
$file=fopen("test.txt","r+");
echo "Inizio a leggere<br><br>";

while (!feof($file))
{
$riga = fgets($file);
echo $riga . "<br>";
$arrayRiga = explode("=>", $riga);
$array[$arrayRiga[0]] = $arrayRiga[1];
}

echo "<br>Fine lettura<br><br>";
print_r($array);

$chiave = 'chiave';
$numero = 1;
$trova = $chiave.$numero;
echo "<br><br>Inizio da " . $trova . "<br><br>";

while (array_key_exists($trova, $array)) {
  echo $trova . " esiste gia<br>";
  $numero++;
  $trova = $chiave.$numero;
}
$numero--;
$trova = $chiave.$numero;
echo "Trovato fino a " . $trova . "<br><br>";
$numero++;
$trova = $chiave.$numero;
$array[$trova] = 'xxx';
echo "Aggiunto " . $trova . "<br><br>";

fwrite($file, "\r\n" . $trova . "=>" . "xxx");
echo "Scritto " . $trova . "<br><br>";

print_r($array);
fclose($file);
?>
 

Discussioni simili