[RISOLTO][PHP] preg_match di un array

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
52
Buongiorno a tutti gli utenti.
Premesso che sto cimentandomi nello studio del PHP e che credo di aver compreso molto bene l'uso delle regex, mi trovo con un semplicissimo script che non funziona come ci si aspetterebbe.
Il frammento di codice è la parte clou, quindi Vi risparmio l'intera stesura.
PHP:
public function trova ()
            {
                $rice = "/[0-9]{2,4}\s?[\-\.\/]?\s?[0-9]{5,8}/";
                preg_match_all ($rice, $this->frase, $trovato);
                print_r ($trovato);
                echo "<br/><br/>";
                echo "Sono stati trovati " . count($trovato[0]) . " numeri telefonici!<br/><br/>";
                $screma = "/^0w{,15}/";
                //$screma2 = "/^3w{,15}/";
                
                foreach ($trovato[0] as $elemento)
                    {
                        //echo $elemento . "<br/>";
                        
                        if (!preg_match ($screma, $elemento, $fisso))
                            {
                                echo "Non ho trovato nulla!<br/>";
                            }else{
                                echo $elemento;
                            }
                    }
                        
                echo "<br/><br/>";
                print_r ($fisso);
                echo "<br/><br/>";
                //print_r ($cellulare);
                echo "<br/><br/>";
                          
            }
Il mio programmino, dato un testo che contiene molte frasi scritte un po a caso, deve permettere l'estrapolazione di tutti i numeri telefonici (fissi e cellulari) dall'intera stringa di testo. Attraverso un primo controllo della stringa, usando "preg_match_all", vado a scremare tutti i numeri telefonici e memorizzarne ogniuno, all'interno di un ulteriore array.
L'array in questione viene riempito correttamente dai valori trovati. Essendo esso, contenitore di numeri fissi e cellulari (in pratica, numeri che cominciano per zero e numeri che cominciano per tre).
In seconda istanza, usando un semplice ciclo "foreach", controllo ogni singolo elemento dell'array appena creato e, con l'aiuto di "preg_match", scremare ulteriormente ogni singolo numero fisso (che comincia per zero) e andarlo a memorizzare in un altro array.
La funzione "print_r", mostra semplicemente un array completamente vuoto.
Sinceramente non capisco dove stia il problema, dato che ho fatto e rifatto mille prove inutili in 2 ore.
Riuscite ad aiutarmi a risolvere l'enigma?
In allegato lo screenshot di ciò che viene stamapto a video.
Grazie anticipate.
 

Allegati

  • risultatoPHP.JPG
    risultatoPHP.JPG
    53,2 KB · Visite: 392

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io, salvo rare eccezioni, non amo le regex quindi ti propongo questo
PHP:
<?php
//....
$trovato[0]=array('0235987','333333','0524-33333');//array per prova
//$screma = "/^0w{,15}/";
//$screma2 = "/^3w{,15}/";
                
foreach ($trovato[0] as $elemento){
    if (substr($elemento, 0, 1) >0){
        //echo "Non ho trovato nulla!<br/>"
        $cellulare[]=$elemento;
    }else{
        $fisso[]=$elemento;
    }
}                     
echo "<pre>tel. fissi<br/>";
print_r ($fisso);
echo "<br/>tel. cellulari<br/>";
print_r ($cellulare);
echo "</pre>";
?>
 

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
52
ciao
io, salvo rare eccezioni, non amo le regex quindi ti propongo questo
PHP:
<?php
//....
$trovato[0]=array('0235987','333333','0524-33333');//array per prova
//$screma = "/^0w{,15}/";
//$screma2 = "/^3w{,15}/";
               
foreach ($trovato[0] as $elemento){
    if (substr($elemento, 0, 1) >0){
        //echo "Non ho trovato nulla!<br/>"
        $cellulare[]=$elemento;
    }else{
        $fisso[]=$elemento;
    }
}                    
echo "<pre>tel. fissi<br/>";
print_r ($fisso);
echo "<br/>tel. cellulari<br/>";
print_r ($cellulare);
echo "</pre>";
?>
Grazie Borgo-Italia, intanto faccio tesoro dell'uso della funzione "substr" che non ricordavo più, dato che sono solo alcuni mesi che studio PHP e non ho avuto modo di usarla. Questo aiuta a sviare il problema ma lasciando irrisolto il dilemma. Volevo concludere al meglio lo studio delle regex, quindi vorrei arrivare al risultato, usandole.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
PHP:
<?php
//....
$trovato[0]=array('0235987','333333','0524-33333');//array per prova
$screma = "/\A0/";//inizia per 0 : \A inizio stringa
foreach ($trovato[0] as $elemento){
    if (!preg_match($screma,$elemento)){
        //echo "Non ho trovato nulla!<br/>"
        $cellulare[]=$elemento;
    }else{
        $fisso[]=$elemento;
    }
}                     
echo "<pre>tel. fissi<br/>";
print_r ($fisso);
echo "<br/>tel. cellulari<br/>";
print_r ($cellulare);
echo "</pre>";
?>
 

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
52
PHP:
<?php
//....
$trovato[0]=array('0235987','333333','0524-33333');//array per prova
$screma = "/\A0/";//inizia per 0 : \A inizio stringa
foreach ($trovato[0] as $elemento){
    if (!preg_match($screma,$elemento)){
        //echo "Non ho trovato nulla!<br/>"
        $cellulare[]=$elemento;
    }else{
        $fisso[]=$elemento;
    }
}                    
echo "<pre>tel. fissi<br/>";
print_r ($fisso);
echo "<br/>tel. cellulari<br/>";
print_r ($cellulare);
echo "</pre>";
?>
Beh, hai risolto senza problemi, usando le regex. Sei stato molto gentile.
Ma se tu potessi spiegare il motivo perchè il mio script non funziona, cosa mi diresti? Perchè il mio "preg_match" non memorizza il valore che trova usando l'opzione di memorizzazione dato? Allego il codice che scrissi in precedenza.
PHP:
public function trova ()
            {
                $rice = "/[0-9]{2,4}\s?[\-\.\/]?\s?[0-9]{5,8}/";
                preg_match_all ($rice, $this->frase, $trovato);
                print_r ($trovato);
                echo "<br/><br/>";
                $screma = "/^0[1-9]{1}[0-9]{,2}\s?[\.\-\/]?\s?[0-9]{5,8}/";
                //$screma2 = "/^3[1-9]{1}[0-9]{1}\s?[\.\-\/]?\s?[0-9]{7}/";
                foreach ($trovato[0] as $elemento)
                    {
                        echo $elemento . "<br/>";
                    
                        
                        preg_match ($screma, $elemento, $fisso);
                    }
                        
                echo "<br/><br/>";
                print_r ($fisso);
                //print_r ($cellulare);
                echo "<br/><br/>";
            }
 

CristianB72

Nuovo Utente
24 Giu 2016
24
1
3
52
Beh, hai risolto senza problemi, usando le regex. Sei stato molto gentile.
Ma se tu potessi spiegare il motivo perchè il mio script non funziona, cosa mi diresti? Perchè il mio "preg_match" non memorizza il valore che trova usando l'opzione di memorizzazione dato? Allego il codice che scrissi in precedenza.
PHP:
public function trova ()
            {
                $rice = "/[0-9]{2,4}\s?[\-\.\/]?\s?[0-9]{5,8}/";
                preg_match_all ($rice, $this->frase, $trovato);
                print_r ($trovato);
                echo "<br/><br/>";
                $screma = "/^0[1-9]{1}[0-9]{,2}\s?[\.\-\/]?\s?[0-9]{5,8}/";
                //$screma2 = "/^3[1-9]{1}[0-9]{1}\s?[\.\-\/]?\s?[0-9]{7}/";
                foreach ($trovato[0] as $elemento)
                    {
                        echo $elemento . "<br/>";
                   
                       
                        preg_match ($screma, $elemento, $fisso);
                    }
                       
                echo "<br/><br/>";
                print_r ($fisso);
                //print_r ($cellulare);
                echo "<br/><br/>";
            }
Cioè, perchè l'array che io ho chiamato "$fisso", non viene valorizzata?
 
Discussioni simili
Autore Titolo Forum Risposte Data
C [RISOLTO]Inserimento variabile php in input html PHP 20
moustache [RISOLTO] SQL PHP IIS PHP 8
L update tabelle in php mysql [risolto] PHP 6
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
C [RISOLTO][PHP] Errore di sintassi PHP 8
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15
Zea [PHP] RISOLTO - creare link con il risultato dell'interrogazione db PHP 1
A [PHP] [RISOLTO]Compilazione campi form da record db PHP 3
A [PHP] [RISOLTO] Modifica record db da form PHP 11
G [PHP][RISOLTO] Include/Require non funzionante PHP 9
C [PHP] RISOLTO - Eliminare elementi duplicati da array multidimensionale PHP 1
G [RISOLTO][PHP] Call to a member function num_rows() on a non-object PHP 9
U [PHP - RISOLTO] Tabella dinamica: colonne selezionate da checkbox PHP 40
CristianB72 [RISOLTO] [PHP] Istruzione "if" non funziona PHP 6
fabryx [PHP] RISOLTO: Download file da web e trasferimento su server PHP 2
fabryx [PHP]RISOLTO: Parsing xml nodi con caratteri speciali PHP 1
G [RISOLTO][PHP] Estrapolare dati da Tabella PHP 11
A [RISOLTO]Errore caricamento file php PHP 21
coccobil [PHP] RISOLTO -Recupare valore data che soddisfa certi requisiti da array PHP 3
fabryx [PHP]RISOLTO: Trasformare righe in colonne assegnando singole variabili PHP 10
fabryx [PHP]RISOLTO: eliminazione riga con singolo valore duplicato in array PHP 19
elpirata [RISOLTO]Stampare giorno della settimana in tabella php PHP 6
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
elpirata [Risolto] Gestione Prenotazioni script php PHP 25
K [risolto] passaggio variabile a pagina php con ajax Ajax 6
J [risolto] Trasformare la seguente classe PHP PHP 2
E [risolto] win 8.1 + IE11 le sessioni PHP non fuonzionano correttamente PHP 7
N [RISOLTO] Mostrare a video le checkbox selezionate con PHP e MySQL PHP 4
otto9due [risolto] Problema sessioni php e login PHP 5
G [risolto] Creazione file excel con PHP PHP 3
S [risolto] Aiuto: ciclo php ( for / while). popolare select dinamicamente da array id. PHP 9
Alessandro Le Mura [risolto] PHP problema memorizzazione array PHP 4

Discussioni simili