Visualizzazione risultati 1 fino 9 di 9

Discussione: problema str_replace e array

  1. #1
    Guest

    Predefinito problema str_replace e array

    Ciao,
    ho un array del genere:
    Codice PHP:
    $caratteri = array(' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    e un array -> $numeri che contiene i numeri fino a 27 (lettere che ci sono in $caratteri)

    poi ho un altro array -> $altroarray che però contiene numeri diciamo random es: {0,1,5,15}

    faccio uno str_replace per sostituire ai numeri di $altroarray le lettere in $caratteri:
    Codice PHP:
    $altroarray = str_replace($numeri,$caratteri,$altroarray);
    il problema é che $altoarray contiene un 15, che nn viene trasformato in "o" come dovrebbe, ma viene trasformato in "ae" -> poiche riconosce prima 1 e poi 5... sapete darmi una soluzione per ovviare il problema e sostituire a 15 "o"???

    Spero di essere stato chiaro, grazie, ciao!

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    str_replace sostituisce stringhe, non numeri, come dice il nome. Devi scriverti una funzione tu che esegua la sostituzione.

  3. #3
    Guest

    Predefinito

    Puoi invertire l'ordine degli array prima di operare le sostituzioni, in modo tale da sostituire prima i numeri doppi e poi quelli singoli.
    Inserisci questo prima della funzione str_replace:

    rsort($caratteri);
    rsort($numeri);


    Ciao!!!

  4. #4
    Guest

    Predefinito

    è una soluzione fallata in partenza... se tu hai per esempio la sequenza "1616" come fai a riconoscere se è "afaf", "paf", "pp" o "afp" ?
    ti serve un carattere speciale che separi le lettere, tipo una virgola, un punto, ...

  5. #5
    Guest

    Predefinito

    Ah bè, se deve scrivere intere parole o frasi, ovviamente tutto questo è da cestinare ;)


    Ciao!

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    ma i numeri sono in un array, non in una stringa, quindi il metodo inverso di debug dovrebbe funzionare senza problemi. Resta che il sistema con tre array e' abbastanza contorto, e piu' che usare str_replace, andrebbe scritta secondo me una funzione apposita.
    Ultima modifica di dreadnaut : 13-02-2009 alle ore 14.54.50

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    ma i numeri sono in un array, non in una stringa, quindi il metodo inverso di debug dovrebbe funzionare senza problemi.
    mmm rileggendo il post direi che hai ragione... come non detto
    la soluzione de debug è valida ;)
    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Resta che il sistema con tre array e' abbastanza contorto, e piu' che usare str_replace, andrebbe scritta secondo me una funzione apposita.
    direi che sono risorse sprecate, dovresti poter gestire tutto tramite array e basta ...
    Ultima modifica di Inverno : 13-02-2009 alle ore 14.58.03

  8. #8
    Guest

    Predefinito

    Ma spero comunque vivamente che non gli serva per quello che ha sospettato Inverno!


    Ciaooo!

  9. #9
    Guest

    Predefinito

    mi serve per questo script che sto facendo (quello per criptare l'ho quasi finito):

    Codice PHP:
    function deCripta ($messaggio) {

    function
    Determina_Cifre ($messaggio,$base) {

    $i = 0;

    do {

    $divis = floor($messaggio/$base);
    $resto = $messaggio-$divis*$base;
    $quoziente = ($messaggio-$resto)/$base;

    $resti_trovati[$i] = $resto;

    $messaggio = $quoziente;

    $i++;

    } while (
    $quoziente != 0);

    return
    $resti_trovati;

    }

    function
    Converti_Numeri ($messaggio) {

    $caratteri = array(' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

    for (
    $i = 0; $i < count($caratteri); $i++) {
    $numeri_corrispondenti[$i] = $i;
    }

    $c = count($messaggio);
    for (
    $i = 0; $i <= count($messaggio); $i++) {
    $numeri[$i] = $messaggio[$c];
    $c--;
    }

    $messaggio = str_replace($numeri_corrispondenti,$caratteri,$numeri);

    return
    implode('',$messaggio);

    }

    $messaggio = Determina_Cifre($messaggio,27);
    $messaggio = Converti_Numeri($messaggio);

    echo
    $messaggio;

    }
    il problema é quello che vi dicevo.. mi sapete scrivere la soluzione? grazie..ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •