PDA

View Full Version : [PHP] Qualche dubbio sugli array


e-commerce84
06-11-2009, 18:23
Ciao,
stò studiando PHP in questi giorni (in particolar modo la versione OO di PHP).

Vengo da 2 esami di Java fatti recentemente e conosco il C (che però non tocco da parecchio).

Ho qualche dubbio sugli array in PHP:

1) Sono obbligato a dichiarare la dimensione dell'array quando lo stò dichiarando oppure posso dichiarare un array che poi vado a riempire di volta in volta con quanti elementi voglio.
Per intenderci...posso fare una cosa del genere:


private $heap[];


Non stò dichiarando la dimensione...se poi ci devo mettere dentro 10 elementi ce ne metto 10, se invevce ce ne devo mettere 1000 ce ne metto 1000, si può fare?

2) Per scorrere (con un ciclo) un array in PHP devo sapere a priori la sua dimensione dell'array come in C (oddio spero di non star dicendo una cavolata ma sono assai arruginito) oppure posso fare qualcosa come con gli array in java dove ho l'attributo length che mi dice quanti elementi ci sono in quell'array?
Qualcosa del genere per intenderci:


for(int i=2; i<unVettore.length; i++)
a = unVettore[i];


Grazie

vhost87
06-11-2009, 18:28
Ciao, non mi pare bisogna specificare una dimensione specifica per gli array, anzi ne sono praticamente sicuro.

$array = array();

Lo puoi riempire di volta in volta.
Un buon inizio è http://php.net.

In PHP non mi pare esista un arrayLenght e per 'spulciare' un array di solito si utilizza il costrutto foreach()

foreach($array as $value) {*echo $value; }

che ad ogni ciclo estrae un elemento dall'array; oppure as value => key che ne estrae chiave e valore (indice ed elemento)

kurts
06-11-2009, 19:05
secondo me la gestione delle variabili e delle strutture dati in generale da parte di PHP è qualcosa di fantastico!!

comunque no, non devi dichiarare la lunghezza di un array a priori, anzi, non devi nemmeno dichiararlo, volendo puoi addirittura riciclare una variabile intera per usarla come array.


guarda questo codice che ho appena buttato giu

<?php

echo $variabile='lol<BR/>';

$variabile='ciao';
echo $variabile.'<BR/>';

$variabile=array('ciao1a', 'ciao2a', 'ciao3a');
foreach($variabile as $riga){echo $riga.'<br/>';}


$variabile['0']='ciao1b';
$variabile['1']='ciao2b';
$variabile['2']='ciao3b';

foreach($variabile as $riga){echo $riga.'<br/>';}

?>

spero di esserti stato utile

vhost87
06-11-2009, 19:11
$variabile[0]='ciao1b';
$variabile[1]='ciao2b';
$variabile[2]='ciao3b';
:D

kurts
06-11-2009, 19:14
$variabile[0]='ciao1b';
$variabile[1]='ciao2b';
$variabile[2]='ciao3b';
:D

beh, come non quotare queste sagge parole

$variabile[1]=:D;

ok, ora smetto di spammare

vhost87
06-11-2009, 19:18
beh, come non quotare queste sagge parole

$variabile[1]=:D;

ok, ora smetto di spammare

LOL

e-commerce84
06-11-2009, 22:53
Ok...chiarissimi....

Per quanto riguarda la spettacolarità di PHP per la gestione delle strutture dati...da principiante che viene da Java mi viene da dire che più che spettacolare è molto comodo (proprio perchè non mi faccio pippe mentali su cosa ci metto dentro) ma allo stesso tempo molto insicuro e pericoloso il giochetto di poter usare una variabile che di fatto viene tipizzata in base al valore che ci metto dentro...

Mi sembra molto type unsafe come linguaggio...al contrario di Java che è strongly typed e type safe...

kurts
07-11-2009, 13:00
per il discorso dei tipi hai ragione però è anche vero che ci sono molte funzioni che forzano il cast del tipo di dato che ti serve.

un altra cosa simpatica del php è questa:

$var1='1 variabile';
$var2='1 variabile';
$var3=$var1+$var2;
echo $var3;


un'altra cosa, michele.broggi mi ha fatto notare che ho usato erroneamente gli apici in quese istruzioni del mio esempio precedente:
$variabile['0']='ciao1b';
$variabile['1']='ciao2b';
$variabile['2']='ciao3b';

in realtà funziona tutto lo stesso per il semplice motivo che non vengono interpretati come indici ma come, dicamo "etichette", questo vuol dire che posso anche creare un campo nell'array chiamato $variabile['campo']
quel campo assumera il nome "campo" e sarà comunque accessibile con un classico foreach oppure anche con l'indice relativo alla sua posizione. (il primo campo ha indice 0 come in java)

vhost87
07-11-2009, 13:03
yep :D