[PHP] Recupero dati da un array

  • Creatore Discussione Creatore Discussione piero60
  • Data di inizio Data di inizio

piero60

Utente Attivo
26 Gen 2015
71
2
8
Salve a tutti,
queste poche righe di codice estraggono solo i numeri
contenuti in una stringa e li mettono in un array.

PHP:
$str = 'sono in 11  e vado in 18';
$contenuto = preg_match_all('!\d+!', $str, $matches);
print_r($matches);

l'array generato dalla stringa introdotta è questo::
Array ( [0] => Array ( [0] => 11 [1] => 18 ) )

Se nella stringa ci sono alti numeri lui incrementerà l'array
per esempio [2] => 22 [3] => 19 ecc.ecc.

I dati vengono introdotti in un campo di testo, dove l'utente
scrive ciò che vuole.
Nel $str = è scritto qualcosa semplicemente per far vedere che il codice
identifica i numeri all'interno della stringa ed elimina tutto il resto.

Ho bisogno di mettere all'interno di alcune variabili
i contenuti dell'array

Esempio:
$a = il contenuto di [0] questo esiste sempre
$b = il contenuto di [1] da qui in poi possono esistere o non esistere i dati numerici
$c = il contenuto di [2] ecc.ecc.

Come si fa una cosa del genere?
Grazie per la collaborazione
 
ho seguito il tuo esempio
PHP:
<?php
$str = 'sono in 11  e vado in 18, poi provo 4';
$contenuto = preg_match_all('!\d+!', $str, $matches);

if ($contenuto > 0 )
{
    $car = "abcdefghijklmnopqrstuvwxyz";
    for($ind = 0; $ind < $contenuto; $ind++)
    {
        $nome = substr($car, $ind, 1);
        ${$nome} = $matches[0][$ind];
    }
    echo "a = ".$a."<br />";
    echo "b = ".$b."<br />";
    echo "c = ".$c."<br />";
}
else
{
    echo "sfortunatamente non ci sono numeri !";
}
?>
 
Non credo che tu possa creare dinamicamente n variabili al bisogno, o sai a priori il numero massimo di valori che puoi accettare, e quindi valorizzi le relative variabili associate al campo, oppure, che se la puoi seguire è sicuramente la soluzione migliore, accedi direttamente all'array con l'indice
 
Ciao Borgo Italia,
grazie per il codice che hai postato, purtroppo non mi risolve il
problema in quanto se si toglie uno dei tre numeri avviene un errore.
Ho formulato male la domanda, ci sono dei numeri introdotti in mezzo
al testo, questi numeri possono essere minimo 1 e massimo 2, e possono
essere composti da 1 cifra o da 2 cifre.
Questi parametri li ho introdotti adesso nel controllo del form
per evitare casini, ho limitato tutto a 2 numeri e non alla arbitrarietà dell'utente.

Poi ho risolto i controlli così:

PHP:
$spostamento = 'sono in 4 e vado in 71';
$cont = preg_match_all('!\d+!', $spostamento, $min_max);
if ($cont ==1 or $cont >1) {
$v1= ($min_max[0][0]);
$v1 = (int)$v1;
}   
if ($cont ==2 or $cont >2) {
$v2= ($min_max[0][1]);
$v2 = (int)$v2;
}else{
$v2 = $v1;
}

echo"primo $v1";
echo"<br><br>";
echo"secondo $v2";

In questo modo se l'utente inserisce un solo numero le 2 variabili
$v1 e $v2 assumono lo stesso valore, se esistono 2 numeri ogni variabile
conterrà il suo numero.

Non esiste il controllo di numero esistente in mezzo al testo in
quanto su questa porzione di codice si arriva solo se esiste
almeno un numero introdotto precedentemente.
Da qui in poi faccio i necessari test sulle 2 variabili per effettuare
il necessario.
Il codice non è elegantissimo ma svolge egregiamente il suo lavoro.
Buon pomeriggio ed ancora grazie.
 
ciao
intanto perche usare $a $b ecc.... secondo me sarebbe meglio usare un array.
poi riprendendo l'esempio di marino51 proverei a fare così (ho fatto una functio per essere comode a fare i test)
PHP:
<?php
function cerca_numeri($s){
    $contenuto = preg_match_all('!\d+!', $s, $matches);
    foreach($matches as $chiave => $valore){
        if(count($valore)==0){
            return "non ci sono numeri";
        }else{
            foreach($valore as $ch => $contiene){
                $a[]=$contiene;
            }
        }
    }
    return $a;
}
/* test *******- */
$str = 'sono in e vado in , poi provo ';
echo "<pre>";
var_dump(cerca_numeri($str));

$str = 'sono in 1 e vado in 3';
var_dump(cerca_numeri($str));

$str = 'sono in 1 e vado in 3, poi provo 5';
var_dump(cerca_numeri($str));
echo "<pre>";
?>
e questo è l'output
string(18) "non ci sono numeri"
array(2) {
[0]=>
string(1) "1"
[1]=>
string(1) "3"
}
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "3"
[2]=>
string(1) "5"
}
 
Ciao a tutti,
grazie per i post, i Vostri codici sono tutti OK, però visto che ho limitato come detto prima a 2 soli numeri le possibilità che l'utente ha, non mi complico la vita, lascio solo la riga che toglie tutti i caratteri e recupera solo i 2 valori numerici

""$cont = preg_match_all('!\d+!', $spostamento, $min_max);""

e poi gestisco i 2 dati ottenuti.

Grazie ancora e buona giornata a tutti.
 

Discussioni simili