Pagina 1 di 1

dubbio codice php

MessaggioInviato: 22 feb 2015, 16:39
da marauder10
premetto che non ho mai studiato informatica ed è da 2 giorni che sto studiando il linguaggio php....
il seguente esercizio mi chiede di scrivere il codice php per il quale dato un array costituito da una parola, mi dia solo le consonanti. Ho proceduto nel seguente modo, con il seguente codice:

Codice: Seleziona tutto
<html>
      <body>
      <?php
       $a=array("e","s","e","r","c","i","t","a","z","i","o","n","e"); //array con lettere della parola
       $b=array("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"); //array con le consonanti dell'alfabeto
       $c=array_intersect($a,$b);
       $d=array_unique($c); //nel caso ci fossero lettere ripetute
     
       
       $e=count($d);
       
       for($i=0;$i<=$e;$i++){
       
       echo$d[$i];
       }
       
     
        ?>
   </body>
</html>



Il problema è che è come se l'array avesse dei posti vuoti perché facendo partire il codice in alcune posizioni mi viene dato un errore,ì del tipo:"Notice: Undefined offset: 0 in C:\xamppp\htdocs\prova.php on line 14" e vengono visualizzate solo le lettere "s","r","c","t".... qualcuno può aiutarmi?

Re: dubbio codice php

MessaggioInviato: 22 feb 2015, 18:44
da simo85
Basta scorrere la stringa carattere per caratere, e se il carattere è una consonante, lo prendi in considerazione, altrimenti no.

Il PHP ha una libreria abbastanza amplia, potresti usare la funzione str_split per convertire una stringa in un array di caratteri, e poi iterare l'array.

Re: dubbio codice php

MessaggioInviato: 22 feb 2015, 19:36
da marauder10
se invece voglio mantenere le funzioni che ho utilizzato come posso rimediare?

Re: dubbio codice php

MessaggioInviato: 23 feb 2015, 10:54
da Russell
marauder10 ha scritto:se invece voglio mantenere le funzioni che ho utilizzato come posso rimediare?
marauder10 ha scritto:Il problema è che è come se l'array avesse dei posti vuoti perché ...


evidentemente una delle 2 funzioni che usi (array_intersect oppure array_unique) inserisce questi "posti vuoti".
Quindi se vuoi continuare ad usare questo approccio devi identificare quale tra le 2 lavora male, e prendere provvedimenti.... eventaulmente riscrivendo tale funzione incriminata visto che non si sta' parlando di funzioni tanto evolute.

Re: dubbio codice php

MessaggioInviato: 24 feb 2015, 3:14
da angus
L'uso di array_intersect() e array_unique() è corretto e fanno quello che devono fare.
Hai dimenticato però una cosa fondamentale e cioè che entrambe le funzioni preservano le chiavi, quindi non puoi iterare l'array con un for fatto in quel modo.
Te ne saresti accorto facendo un var_dump di $d
Codice: Seleziona tutto
array(6) {
  [1]=>
  string(1) "s"
  [3]=>
  string(1) "r"
  [4]=>
  string(1) "c"
  [6]=>
  string(1) "t"
  [8]=>
  string(1) "z"
  [11]=>
  string(1) "n"
}

Per iterare gli array, molto più comodo è usare foreach http://php.net/manual/en/control-structures.foreach.php

Nel tuo caso, in questo modo:
Codice: Seleziona tutto
foreach ($d as $v) {
    echo $v;
}


Personalmente, visto che sono pigro, piuttosto di usare array_intersect() con le consonanti, avrei usato array_diff() con le vocali... ;-)
E poi non è chiaro se la parola iniziale sia in una stringa o in un array già divisa per lettere, nel dubbio torna utilissimo il consiglio di Foto Utentesimo85 ad usare str_split:
Codice: Seleziona tutto
$word="esercitazione";
foreach (array_unique(array_diff(str_split($word),array("a","e","i","o","u"))) as $v)
{
    echo $v;
}