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

Discussione: Esercizio array.

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6

    Esercizio array.

    Salve ragazzi non sono affatto un esperto di php, sto facendo un corso e ho basi di c++. Mi sono trovato ad affrontare gli array associativi di php che insomma che io mi ricordi in c/c++ non esistono.
    Ne ho capito il funzionamento, insomma molto intuitivo, ma quando provo a fare un esercizio di questo genere...
    Codice PHP:
    <?php$arr=["e","s","e","r","c","i","z","i","o"];$assoc=[];$conta=count($arr);
    for(
    $i=0;$i<$conta;$i++){      if($assoc[$arr[$i]]==null){        $assoc[$arr[$i]]=1;   }   else{    $assoc[$arr[$i]]++;   }}

    print_r($assoc);?>
    Insomma funziona fa quello che voglio, diciamo che prende come indice le lettere del primo array le mette come indice e poi le conta.
    Il problema che non capisco, è che nonostante funziona continua a dirmi che gli indici sono indefiniti.

    Notice: Undefined index: e in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Notice: Undefined index: s in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Notice: Undefined index: r in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Notice: Undefined index: c in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Notice: Undefined index: i in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Notice: Undefined index: z in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Notice: Undefined index: o in C:\Users\Polve\Desktop\Sito\provaarray.php on line 14

    Array ( [e] => 2 [s] => 1 [r] => 1 [c] => 1 [i] => 2 [z] => 1 [o] => 1 )

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6
    PS: grazie in anticipo e scusate il livello basilare.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Questo non è il modo di definire un array in PHP:
    $arr=["e","s","e","r","c","i","z","i","o"];

    Un array si definisce usando le parentesi tonde e dichiarando che si tratta di un array
    $arr = array("e","s","e","r","c","i","z","i","o");

    Ma questo non è un array associativo, è solo un array che contiene quegli elementi e che ha come indici 0,1,2,3,4,... prova a scrivereci print_r($arr); subito dopo, così vedi come è fatto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6
    Per quanto riguarda il modo di dichiarare e inizializzare un array, lo so che è il metodo sbagliato, ho fatto una prova per vedere se il php era così flessibile, ed infatti lo è ed accetta la dichiarazione in questo modo.
    Anche per quanto riguarda il fatto che non sia un array associativo lo so benissimo, se per caso hai letto il codice, è molto semplice sto prendendo l'array normale e sto inserendo come indice/chiave le lettere dell array normale, e come come valore faccio fare un incremento. In questo modo ottengo un array associativo quindi con indici le lettere e come valore il numero delle volte che viene incontrata la lettera nell array normale.
    Fatte queste premesse, ripeto la domanda il mio mini algoritmo funziona il mio problema sono gli errori di definizione.
    Non riesco a capire perchè mi viene dato undefinied, anche perchè alla fine come noti ottengo perfettamente il risultato che voglio.
    Ringrazio ancora anticipatamente spero di essermi spiegato meglio.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    ti viene dato undefinied perche hai solo dichiarato che quella variabille sarà un array, ma quando fai $assoc[$arr[$i]] == NULL, l'index corrispondete a $arr[$i] non essite... al posto di fare $assoc[$arr[$i]] == NULL, prova a fare empty($assoc[$arr[$i]])...
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    forse non mi sono spiegato molto bene... al non aver mai inizializzato con un qualche valore all'array in quel indice... semplicemente l'array in quella posizione non esiste... non ha un valore NULL semplicemente non esiste... e non puoi fare confronti con variabili che non esistono
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6
    Con empty non cambia, comunque ho capito perfettamente, e avevo già capito la cosa, allora mi domando se volessi fare un operazione simile, come devo fare? Quello che voglio ottenere lo ripeto è questo tramite for inserisco i valori di $arr uno alla volta nell array come indici, e come valore di ogni lettere il numero di quante volte compare.
    Il meccanismo mi sembra vada benissimo, insomma l ouput è quello che voglio, ma io quella condizione con null la devo fare, senno quale altra soluzione ce? grazie davvero per l aiuto ^^

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    con empty ti da sempre errore?...
    Codice PHP:
    $arr=["e","s","e","r","c","i","z","i","o"];$assoc=[];$conta=count($arr);
    for(
    $i=0;$i<$conta;$i++){      if(empty($assoc[$arr[$i]])){        $assoc[$arr[$i]]=1;   }   else{    $assoc[$arr[$i]]++;   }}

    print_r($assoc);?> 
    oppure in questo caso puoi usare anche isset
    Codice PHP:
    $arr=["e","s","e","r","c","i","z","i","o"];$assoc=[];$conta=count($arr);
    for(
    $i=0;$i<$conta;$i++){      if(isset($assoc[$arr[$i]])){    $assoc[$arr[$i]]++;       }   else{    $assoc[$arr[$i]]=1;   }}

    print_r($assoc);?> 
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    6
    Perdonami proprio ora stavo per editare, funziona eccome, come un pirla avevo lasciato il confronto null cose senza senzo quando ci si impianta su uno script e meglio eliminare e fare altro avvolte.Grazie, mi vedrò la funzione empty anche se dal nome mi sembra palese, e anche isset.
    Non so se sia normale, non sono un professionista come voi sto facendo un corso html/php/msql, ma io ho studiato precedentemente a scuola programmazione ma procedurale con visual basic, poi da autodiatta ho studiato il c++ e basi basi di c, anche programmazione ad oggetti, ma ripeto tutto non in modo professionale, io so solo che con un linguaggio così "libero" mi trovo in difficoltà.
    Spero davvero di poter imparare bene e di poter lavorare nel settore anche se sono un attimo preoccupato dall impronta mentale che ho sulla programmazione. grazie comunque davvero ^^

  10. #10
    Quote Originariamente inviata da polve90 Visualizza il messaggio
    Con empty non cambia, comunque ho capito perfettamente, e avevo già capito la cosa, allora mi domando se volessi fare un operazione simile, come devo fare? Quello che voglio ottenere lo ripeto è questo tramite for inserisco i valori di $arr uno alla volta nell array come indici, e come valore di ogni lettere il numero di quante volte compare.
    Il meccanismo mi sembra vada benissimo, insomma l ouput è quello che voglio, ma io quella condizione con null la devo fare, senno quale altra soluzione ce? grazie davvero per l aiuto ^^
    Non sprecare un algoritmo quando c'è la funzione apposita già fatta: array_count_values.
    http://it2.php.net/manual/it/functio...unt-values.php

    C'è un detto.. che trovai citato per la prima volta proprio su un libro americano di programmazione in C++: Non reinventare la ruota.
    Altre volte declinato in: La ruota esista già. Usala per andare avanti.

    Poi..se il tuo esempio ha funzione solo didattica per pensare come potrebbe essere strutturata una tale funzione, ok...

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.