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

Discussione: Errore foreach php

  1. #1

    Errore foreach php

    Ciao a tutti... sto provando a fare un codice che apre da una wordlist in txt delle parole e controlla se possono essere scritte o no su una calcolatrice.. il codice è questo:
    Codice PHP:
    <? $file=file("parole.txt");
    $numero[1]='i';
    $numero[2]='e';
    $numero[3]='s';
    $numero[4]='l';
    $numero[5]='b';
    $numero[6]='o';
    foreach(
    $file as $parola){ 
    $lettera preg_split('//'$parola, -1PREG_SPLIT_NO_EMPTY);
    $i 1;
    while(
    $i <= 6){ 
    foreach(
    $lettera as $lett){
    if(
    $lett == $numero[$i]){ 
    $g++;
    }
    }
    $i++;

    if(
    $g == strlen($parola)){
    echo 
    "$parola </br>"
    }
    }
    ?>
    Ho pensato che era un errore di codice, ma togliendo il primo foreach il codice funziona... infatti se faccio:
    Codice PHP:
    <? $file=file("parole.txt");
    $numero[1]='i';
    $numero[2]='e';
    $numero[3]='s';
    $numero[4]='l';
    $numero[5]='b';
    $numero[6]='o';
    $parola "sololei";
    $lettera preg_split('//'$parola, -1PREG_SPLIT_NO_EMPTY);
    $i 1;
    while(
    $i <= 6){ 
    foreach(
    $lettera as $lett){
    if(
    $lett == $numero[$i]){ 
    $g++;
    }
    }
    $i++;

    if(
    $g == strlen($parola)){
    echo 
    "$parola </br>"
    }
    ?>
    lo script mostra "sololei", mentre cambiando una lettera che non è possibile scrivere con i numeri capovolti lo script non mostra nulla. Ho provato anche a cancellare tutto il codice e vedere se era solo un problema con il file parole, ma se faccio:
    Codice PHP:
    <? $file=file("parole.txt"); foreach($file as $parola){ echo $parola; } ?>
    appaiono tutte le parole della lista... dove ho sbagliato? adesso ho pensato di fare un codice facile che inserisca tutte le parole in un database MySql e poi usare quello, ma voglio proprio capire dove ho sbagliato!!!
    Grazie a tutti in anticipo!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    se è così sembrerebbe coretto.. cosa succede? non stampa nulla?
    ti consiglio di mettere degli echo in più:
    - subito dopo foreach qlcs come echo "PAROLA '$parola'
    ";

    - dopo l'altro foreach echo $lett.' '.$numero[$i]"
    ";


    ...e vedere un po'... naturalmente prova con un file "piccolo" (due parole) per iniziare

    Un'altra cosa... verifica che nel file ad ogni parola non corrispondano caratteri extra, p.es. un "\r\n" finale in ciascuna

  3. #3
    Il file contiene solo 2 righe quindi non penso che sia troppo pesante. su una riga c'é "sololei" e sull'altra "ciao" ma non appare nulla. nel file che avevo preso all'inizio ci sono 60000 parole e quando lanciavo lo script appariva sempre abbaiare. non ho ancora capito il perché... intanto grazie per le risposte. se riesco a sistemare vi faccio sapere. preferivo evitare di fare in mysql perché il file che ho ora sono circa 500 kb, ma ho già pronta una wordlist da 1,44 gb quindi penso che sia troppo lungo anche per uno script inserire e poi leggere ogni parola dal database. avevo già fatto un lavoro del genere per decriptare gli md5 ma per inserire 300000 record ci aveva messo 240 secondi ed era andato in timeout!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    forse sono proprio i "\r\n" in coda... vedi un po'

  5. #5
    in che senso sono proprio i \r\n... dovrei aggiungerli io?

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    per ogni parola estrapolata stampa a video la sua lunghezza e conta i caratteri... sto pensando che forse tu hai un file con tante parole, una per riga e in ciascuna la stringa è in effetti terminata con caratteri non visibili, quindi i controlli sono sbagliati, per esempio forse "sololei" è in realtà letta come "sololei"+"\r\n" o - più facilmente - con altri caratteri terminatori/spuri in più

  7. #7
    quindi per risolvere come posso fare? se quei caratteri non sono visibili non posso nemmeno cancellarli...

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    prima di $i = 1; metti print'
    ';var_export($parola);print'
    ';var_export($lettera);print'
    ';
    e posta il risultato applicato sul tuo "file"

  9. #9
    scusa l'assenza...
    ho provato adesso ad aggiungere le righe che mi hai detto ma non funziona lo stesso... ora mostra :
    codice:
     'sololei ' array ( 0 => 's', 1 => 'o', 2 => 'l', 3 => 'o', 4 => 'l', 5 => 'e', 6 => 'i', 7 => ' ', )  'ciao' array ( 0 => 'c', 1 => 'i', 2 => 'a', 3 => 'o', )
    comunque visto che sto cercando di imparare bene php, a cosa serve di preciso la funzione var_export ?? grazie come sempre!

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    var_export stampa a video il valore di una variabile, così vedi su cosa "lavora" lo script... come vedi "sololei" ha uno spazio in coda!

    Prova a mettere dopo foreach($file as $parola){ una riga con $parola=trim($parola; (toglie eventuali spazi in testa e in coda)

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.