2009-06-08 16 views
9

Sono un programmatore .net vb & C#, ma non riesco a capire come ottenere i miei oggetti in una lista o array in PHP.Come posso creare una lista o una matrice di oggetti in PHP?

var mylist = new List<myobject>(); 

mylist.add(myobject1); 
mylist.add(myobject2); 

Quello che ho provato.
Prodotti essendo una proprietà per una raccolta di orderitems:

$this->Products = getOrderItems(); 

public function getOrderItems() 
{ 
    $items = array(); 
    $count = 0; 

     // connect to db, query..... 

    while($row = mysql_fetch_array($result, MYSQL_BOTH)){ 
     $count++; 
     $items[$count] = ($row); 
    } 
    echo 'Count of Order Items...' . $count; 

    return $items; 
} 

Am I neppure vicino?

risposta

11
$items = array(); 

while($row = mysql_fetch_array($result, MYSQL_BOTH)) { 
    $items[] = $row; 
} 
echo 'Count of Order Items...', count($items); 
+0

Questo incremento per ogni riga che viene recuperato così alla fine tutte le righe sono in $ articoli? – OneSmartGuy

+0

Sembra anche che io abbia problemi con $ this-> Products = getOrderItems(); È legale in PHP? – OneSmartGuy

+0

Dipende da cosa $ questo è e se ha i prodotti var $. – Nicholas

2

Cosa orlandu63 postato è corretto - utilizzando $items[] = $row significa che $ riga viene aggiunto numericamente come il prossimo elemento di $ articoli.

Un'altra opzione è che se è presente un campo ID in $ row, è possibile eseguire $items[$row->id] = $row;, che ha il vantaggio di indicizzare l'array e semplificare la ricerca di un determinato elemento.

Suggerisco davvero di leggere tramite http://www.php.net/manual/en/language.types.array.php, che vi spiegherà alcune delle cose interessanti che PHP consente con gli array.

4
  • $this->Products = getOrderItems(); è legale in PHP, ma si riferisce alla funzione (globale) getOrderItems() invece del metodo di classe. i metodi e le variabili di classe devono sempre essere preceduti con $this-> (o self::, se sono variabili statiche) quando vengono richiamati dall'interno della classe.
    nel codice di esempio, hai sbagliato. getOrderItems è definito come metodo di classe, ma la tua chiamata non è $this-> -scop, quindi php assume una funzione. dovrebbe lanciare un errore function not found.

  • la notazione [] aggiunge un elemento alla fine di un array.

  • l'indice del primo elemento nel codice di esempio è 1 (non è il caso standard per VB?). php normalmente inizia da 0 - anche se è possibile (perché gli array php non sono matrici reali) per iniziare con indici arbitrari raccomanderei di restare con zero.

  • mysql_fetch_array è un antico modo di lavorare con mysql . al giorno d'oggi stai meglio con mysqli o (ancora meglio) PDO.

  • (...) un elenco o un array in php.

    liste, array, pile, qualsiasi cosa: in php everthing è una mappa ordinata (erroneamente chiamato array):

    PHP: Arrays: Un array in PHP è in realtà una mappa ordinata. Una mappa è un tipo che associa valori a chiavi. Questo tipo è ottimizzato per diversi usi; può essere trattato come una matrice, lista (vettore), tabella hash (un'implementazione di una mappa), dizionario, raccolta, stack, coda e probabilmente di più. Poiché i valori dell'array possono essere altri array, sono anche possibili alberi e array multidimensionali.

aggiornamento:

dispiace, non ho la più abbastanza tempo in questo momento di spiegare le sfumature più sottili di pdo/mysqli sopra mysql.

ecco sono solo le basi:

  • oop: DOP e mysqli sono Object Oriented (mysqli dura ottenuto alias funzionali)

  • dichiarazioni di preparazione: più importanti: DOP/mysqli ha ottenuto dichiarazioni preparate. Ciò significa che, prima, si prepara la query con i segnaposto una volta, quindi si inseriscono i valori successivamente (senza la necessità di preparare la query una seconda volta). questo approccio ha 3 evidenti vantaggi:

    • prestazioni: è più veloce, poiché il database deve solo analizzare, compilare e ottimizzare la query una volta (almeno con le query complesse)

    • sicurezza: senza necessità di stringhe tra virgolette (avviene automaticamente!), rendendo più difficile l'attacco sql-

    • manutenibilità: la parte logica e dati della query sono separati, quindi più facile da leggere e non si hanno a che fare un sacco di concenation stringa conducente

  • guidato: PDO non è specifico database. ci sono diversi db-sistemi supportati, rendendo più facile alla porta il codice per altri db-backends (ma non è un livello di db-un'astrazione come ODBC, in modo che lo SQL deve ancora essere compatibile) e aumentare riutilizzabilità

ovviamente, c'è molto di più

+0

+1 davvero buona risposta. copre l'esempio nella domanda, copre php-internals. – knittl

+0

Wow man che bella risposta! Quindi puoi approfondire ulteriormente mysqli e PDO? – OneSmartGuy

Problemi correlati