Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Help per una funzione

  1. #1

    Help per una funzione

    Salve ragazzi
    Sto uscendo pazzo...
    Praticamente in PHP ho una stringa tipo:
    $str = " ... [/T=var] ... [/T=var1] ... [/T=var2] ... [/T=var3] [/T=var4]";
    i 3 puntini, indicano qualsiasi carattere, però puo essere anche vuoto, quindi senza alcun carattere (il caso di var4)
    praticamente devo sviluppare una funzione che dato come input il nome della var, mi prenda i suoi corrispettivi puntini di sinistra
    (o eventualemente mi dica che non c'è nessun carattere). Ovviamente sappiamo che ci sono [/T=var] [/T=var1] etc.. insomma i vari nomi delle var
    ovviamente la funzione deve funzionare con qualsiasi numero di var*, anche se c'è una sola var

    Io ci sto provando con explode, e vari cicli, ma sinceramente non riesco a venirci fuori.. sopratutto perchè il numero di var è variabili..

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova questo.

    Codice PHP:
    $str "1234[TOTO]4567[toto]7890[titi][IOPP]";
    //---- il trucco
    $str "]".$str;

    $pattern "|[]](.*)[[]|U";

    preg_match_all($pattern$str $matches);

    print_r($matches); 
    codice:
    Array
    (
        [0] => Array
            (
                [0] => ]1234[
                [1] => ]4567[
                [2] => ]7890[
                [3] => ][
            )
    
        [1] => Array
            (
                [0] => 1234
                [1] => 4567
                [2] => 7890
                [3] => 
            )
    
    )
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Originariamente inviato da badaze
    Prova questo.

    Codice PHP:
    $str "1234[TOTO]4567[toto]7890[titi][IOPP]";
    //---- il trucco
    $str "]".$str;

    $pattern "|[]](.*)[[]|U";

    preg_match_all($pattern$str $matches);

    print_r($matches); 
    codice:
    Array
    (
        [0] => Array
            (
                [0] => ]1234[
                [1] => ]4567[
                [2] => ]7890[
                [3] => ][
            )
    
        [1] => Array
            (
                [0] => 1234
                [1] => 4567
                [2] => 7890
                [3] => 
            )
    
    )
    Si ma io non conosco la posizione delle var, quindi se ad esempio mi serve il valore a sinistra di [toto] come faccio a capire che devo prendere l'indice [1][1]dell'array?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Posta quello che vuoi avere alla fine.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Codice PHP:
    <?php 
    $str     
    "1234[tutu]4567[toto]7890[titi][tata]6666[tete]";

    $pattern "|[[](.*)[]]|U";
    preg_match_all($pattern$str $matches1);

    print_r($matches1);

    //---- il trucco
    $str     "]".$str;
    $pattern "|[]](.*)[[]|U";
    preg_match_all($pattern$str $matches2);

    print_r($matches2);

    foreach (
    $matches1[1] as $key => $value) {
     ${
    $value} = $matches2[1][$key];

    print 
    "
    "
    ;
    print 
    "tutu = $tutu
    "
    ;
    print 
    "toto = $toto
    "
    ;
    print 
    "titi = $titi
    "
    ;
    print 
    "tata = $tata
    "
    ;
    print 
    "tete = $tete
    "
    ;
     
    ?>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Ok funziona alla perfezione la tua soluzione... purtroppo il problema rimane perchè all'inzio non mi sono spiegato bene:
    Il fatto è che purtroppo penso non sia possibile attuare un'espressione regolare, mi spiego meglio:
    Nell'esempio si usavano [tutu] o [tete] solo a scopo illustrativo, nel senso che questi non hanno una sintassi regolare con le parentesi quadre.
    Provo a spiegarmi ancora meglio:
    Nel modello generale che avevo proposto, ovvero
    $str = 'valore1 [/T=tabella1] valore2 [/T=tabella2]';
    L'espressione regolare è ottima come soluzione, perchè approfittiamo delle parentesi quadre
    Purtroppo nell'esempio reale le tabelle non sono rappresentate con parentesi quadre ma tramite un numero, che viene fuori da un algoritmo (crc32), quindi:
    $str = 'valore1 '.crc32([/T=tabella1]).' valore2 '.crc32([/T=tabella2]);
    Noi quindi conosciamo: il corrispettivo di ogni crc32 delle tabelle.
    Non conosciamo: la posizione delle tabelle e se a sinistra ci sono altri valori, o ci sono solo numeri o ci sono solo lettere o uno spazio.
    In pratica: dobbiamo leggere il valore a sinistra della tabella, finchè non giunge ad un'altra tabella che diventa in questo caso il delimitatore.

    In principio avevo pensato ad una soluzione con la funzione explode, e con vari cicli lavorare su gli array restituiti, ma sinceramente non ne sono venuto a capo
    Scusami

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non ho capito nulla.
    Posta un esempio reale.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    vediamo se cosi è spiegato meglio:
    $str = " ... ".alg([/T=var])." ... ".alg[/T=var1])." ... ".alg[/T=var2])." ... ".alg[/T=var3])." ".alg[/T=var4]";
    i 3 puntini, indicano qualsiasi carattere, però puo essere anche vuoto, quindi senza alcun carattere (il caso di var4)
    praticamente devo sviluppare una funzione che dato il nome della var, mi prenda i suoi corrispettivi puntini di sinistra
    (o eventualemente mi dica che non c'è nessun carattere).
    La funzione deve funzionare con qualsiasi numero di var*, anche se c'è una sola var.
    Non sappiamo l'ordine delle var, e conosciamo il valore (che poi è un numero) restituito dalla funzione alg();

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Con il tuo esempio non capisco se . di .alg è un concatenamento o altro. In alcuni casi hai delle ( ) in altri no !!!

    Quindi se hai una stringa come dovrebbe essere penso che capiro' quello che intendi.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Ok si, senta notepad, avevo scritto male la funzione, ricapitolando:
    Alg è una funzione che restituisce un numero basandosi sulla funzione nativa crc32.
    La stringa fatta bene è questa:
    $str = " ... ".alg("[/T=var]")." ... ".alg("[/T=var1]")." ... ".alg("[/T=var2]")." ... ".alg("[/T=var3]")." ".alg("[/T=var4]");

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.