2009-06-08 21 views
9

Soy un programador .net vb & C#, pero parece que no puedo encontrar la forma de convertir mis objetos en una lista o matriz en PHP.¿Cómo creo una lista o una matriz de objetos en PHP?

var mylist = new List<myobject>(); 

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

Lo que he intentado.
los productos siendo una propiedad para una colección de 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 incluso cerca?

Respuesta

11
$items = array(); 

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

Será este incremento para cada fila que se traiga por lo que al final todas las filas se encuentran en artículos $? – OneSmartGuy

+0

También parece que tengo problemas al usar $ this-> Products = getOrderItems(); ¿Es eso legal en php? – OneSmartGuy

+0

Depende de qué $ es esto y si tiene los var $ Products. – Nicholas

2

Lo orlandu63 publicada es correcta - el uso de $items[] = $row significa que $ fila se añade numéricamente como el siguiente elemento de $ items.

Otra opción es que si hay un campo id en $ fila, puede hacer $items[$row->id] = $row;, que tiene la ventaja de la indexación de su matriz y lo que es más fácil encontrar un artículo dado.

Realmente sugiero leer http://www.php.net/manual/en/language.types.array.php, que le explicará algunas de las cosas geniales que PHP permite con las matrices.

4
  • $this->Products = getOrderItems(); es legal en PHP, pero se refiere a la función (global) getOrderItems() en lugar del método de clase. los métodos de clase y las variables siempre tienen que tener como prefijo $this-> (o self::, si son variables estáticas) cuando se llaman desde el interior de la clase.
    en su código de muestra, usted tiene eso mal. getOrderItems se define como método de clase, pero tu llamada no está $this-> -scoped, por lo que php asume una función. debería arrojar un function not found -error.

  • la notación [] agrega un elemento al final de una matriz.

  • el índice del primer elemento en su código de muestra es 1 (¿no es el caso estándar para VB?). php normalmente comienza en 0, aunque es posible (debido a que las matrices php no son matrices reales) comenzar en índices arbitrarios, recomiendo seguir con cero.

  • mysql_fetch_array es un antigua forma de trabajar con mysql. hoy en día es mejor con mysqli o (incluso mejor) PDO.

  • (...) una lista o matriz en php.

    listas, matrices, pilas, lo que sea: en php Todo es un mapa ordenado (engañosamente llamado matriz):

    PHP: Arrays: Un array en PHP es en realidad un mapa ordenado. Un mapa es un tipo que asocia valores a claves. Este tipo está optimizado para varios usos diferentes; se puede tratar como una matriz, lista (vector), tabla hash (una implementación de un mapa), diccionario, colección, pila, cola y probablemente más. Como los valores de matriz pueden ser otras matrices, también son posibles árboles y matrices multidimensionales.

actualización:

lo siento, yo no tengo tiempo suficiente en este momento para explicar los matices más finos de pdo/mysqli sobre mysql.

así que aquí son sólo los conceptos básicos:

  • oop: pdo y mysqli están orientados a objetos (mysqli dura consiguió alias funcionales)

  • declaraciones de preparación: más importantes: DOP/mysqli tiene declaraciones preparadas. eso significa que primero prepara la consulta con marcadores de posición una vez, luego completa los valores más tarde (sin la necesidad de preparar la consulta por segunda vez). este enfoque tiene 3 ventajas obvias:

    • rendimiento: que es más rápido, debido a que la base de datos sólo tiene que analizar, compilar y optimizar la consulta una vez (al menos con consultas complejas)

    • seguridad: sin necesidad de cadenas entre comillas (¡se produce automáticamente!), lo que hace que los ataques de inyección sql sean más difíciles

    • mantenimiento: la parte lógica y los datos de la consulta están separados, por lo tanto más fácil de leer y que no tiene que hacer un montón de concenation cadena

  • conducido driver: DOP no está base de datos específica. hay varias db-sistemas compatibles, por lo que es más fácil de portar su código en otros db-backends (pero no es una capa de db-abstracción como ODBC, por lo que el SQL todavía tiene que ser compatible) y el aumento de la reutilización

por supuesto, hay mucho más a él

+0

+1 muy buena respuesta. cubre el ejemplo en la pregunta, cubre php-internal. – knittl

+0

Guau, ¡qué gran respuesta! Entonces, ¿puedes elaborar más sobre mysqli y PDO? – OneSmartGuy

Cuestiones relacionadas