Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

dubbio codice php

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] dubbio codice php

Messaggioda Foto Utentemarauder10 » 22 feb 2015, 16:39

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?
Avatar utente
Foto Utentemarauder10
25 3
 
Messaggi: 45
Iscritto il: 29 giu 2013, 21:25

0
voti

[2] Re: dubbio codice php

Messaggioda Foto Utentesimo85 » 22 feb 2015, 18:44

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.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: dubbio codice php

Messaggioda Foto Utentemarauder10 » 22 feb 2015, 19:36

se invece voglio mantenere le funzioni che ho utilizzato come posso rimediare?
Avatar utente
Foto Utentemarauder10
25 3
 
Messaggi: 45
Iscritto il: 29 giu 2013, 21:25

1
voti

[4] Re: dubbio codice php

Messaggioda Foto UtenteRussell » 23 feb 2015, 10:54

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.
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25

1
voti

[5] Re: dubbio codice php

Messaggioda Foto Utenteangus » 24 feb 2015, 3:14

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;
}
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.475 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4168
Iscritto il: 20 giu 2008, 17:25


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti