arrays.docx

Upload: olinger-perez-marenco

Post on 10-Jan-2016

6 views

Category:

Documents


0 download

TRANSCRIPT

ArraysUnarrayen PHP es realmente un mapa ordenado. Un mapa es un tipo de datos que asociavaloresconclaves. Este tipo es optimizado para varios usos diferentes; puede ser usado como una matriz real, una lista (vector), una tabla asociativa (una implementacin de un mapa), diccionario, coleccin, pila, cola, y posiblemente ms. Ya que los valores de unarraypueden ser otrosarrays, rboles y tambin son posiblesarrays multidimensionales.Una explicacin sobre tales estructuras de datos est fuera del alcance de este manual, pero encontrar al menos un ejemplo de cada uno de ellos. Para ms informacin, consulte la extensa literatura que existe sobre este amplio tema.SintaxisEspecificacin conarray()Unarraypuede ser creado usando el constructor del lenguajearray(). ste toma un cierto nmero de parejasclave=>valorcomo argumentos. array( clave => valor, clave2 => valor2, clave3 => valor3, ... )La coma despus del ltimo elemento del array es opcional y se puede omitir. Esto normalmente se hace para arrays de una nica lnea, es decir, es preferiblearray(1, 2)quearray(1, 2, ). Por otra parte, para arrays multilnea, la coma final se usa comnmente, ya que permite la adicin sencilla de nuevos elementos al final.A partir de PHP 5.4 tambin se puede usar la sintaxis de array corta, que reemplazaarray()con[].Ejemplo #1 Un array simple

Laclavepuede ser unintegero unstring. Elvalorpuede ser de cualquier tipo.Adems, los siguientes moldeados de tipo en laclaveproducir: Strings que contienenintegers vlidos sern moldeados a el tipointeger. P.e.j. la clave"8"en realidad ser almacenada como8. Por otro lado"08"no ser convertido, ya que no es un nmero integer decimal vlido. Floats tambin sern moldeados enintegers, lo que significa que la parte fraccionaria se elimina. P.e.j. la clave8.7en realidad ser almacenada como8. Bools son moldeados aintegers, tambin, p.e.j. la clavetrueen realidad ser almacenada como1y la clavefalsecomo0. Nullser moldeado a un string vaco, p.e.j. la clavenullen realidad ser almacenada como"". Arrays yobjectsno puedenser usados como claves. Si lo hace, dar lugar a una advertencia:Illegal offset type.Si varios elementos en la declaracin del array usan la misma clave, slo la ltima ser usada y los dems son sobrescritos.Ejemplo #2 Ejemplo de moldeado de tipo y sobrescritura

El resultado del ejemplo sera:array(1) { [1]=> string(1) "d"}Como todas las claves en el ejemplo anterior se convierten en1, los valores sern sobrescritos en cada nuevo elemento y el ltimo valor asignado"d"es el nico que queda.Los arrays PHP pueden contener clavesintegerystringal mismo tiempo ya que PHP no distingue entre arrays indexados y asociativos.Ejemplo #3 Claves mixtasintegerystring

El resultado del ejemplo sera:array(4) { ["foo"]=> string(3) "bar" ["bar"]=> string(3) "foo" [100]=> int(-100) [-100]=> int(100)}Laclavees opcional. Si no se especifica, PHP usar el incremento de la claveintegerms grande utilizada anteriormente.Ejemplo #4 Arrays indexados sin clave

El resultado del ejemplo sera:array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" [2]=> string(5) "hello" [3]=> string(5) "world"}Es posible especificar la clave slo para algunos de los elementos y dejar por fuera a los dems:Ejemplo #5 Claves no en todos los elementos

El resultado del ejemplo sera:array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d"}Como se puede ver el ltimo valor"d"se le asign la clave7. Esto es debido a que la mayor clave integer era6.Acceso a elementos de array con la sintaxis de corcheteLos elementos de array se pueden acceder utilizando la sintaxisarray[key].Ejemplo #6 Acceso a elementos de array

El resultado del ejemplo sera:string(3) "bar"int(24)string(3) "foo"Nota:Tanto los corchetes como las llaves pueden ser utilizadas de forma indiferente para acceder a elementos de un array (p.ej.:$array[42]y$array{42}harn lo mismo en el ejemplo anterior).A partir de PHP 5.4 es posible hacer referencia al array del resultado de una llamada a una funcin o mtodo directamente. Antes slo era posible utilizando una variable temporal.Desde PHP 5.5 es posible hacer referencia directa un elemento de un array literal.Ejemplo #7 Hacer referencia al resultado array de funciones

Nota:Si intenta acceder a una clave del array que no se ha definido es lo mismo que el acceso a cualquier otra variable no definida: se emitir un mensaje de error de nivelE_NOTICE, y el resultado serNULL.Creacin/modificacin con sintaxis de corcheteUnarrayexistente puede ser modificado al definir valores explcitamente en ste.Esto se realiza mediante la asignacin de valores alarray, especificando la clave en corchetes. La clave tambin se puede omitir, resultando en un par de corchetes vacos ([]). $arr[clave] = valor; $arr[] = valor; // clave puede ser un integer o string // valor puede ser cualquier valor de cualquier tipoSi$arran no existe, se crear, as que esto es tambin una forma alternativa de crear unarray. Sin embargo, esta prctica es desaconsejada ya que si$arrya contiene algn valor (p.ej. unstringde una variable de peticin), entonces este valor estar en su lugar y[]puede significar realmente eloperador de acceso a cadenas. Siempre es mejor inicializar variables mediante una asignacin directa.Para cambiar un valor determinado, se debe asignar un nuevo valor a ese elemento con su clave. Para quitar un par clave/valor, se debe llamar la funcinunset()en ste.

Nota:Como se mencion anteriormente, si no se especifica una clave, se toma el mximo de los ndicesintegerexistentes, y la nueva clave ser ese valor mximo ms 1 (aunque al menos 0). Si todava no existen ndicesinteger, la clave ser0(cero).Tenga en cuenta que la clave integer mxima utilizada para steno es necesario que actualmente exista en elarray. sta slo debe haber existido en elarrayen algn momento desde la ltima vez que elarrayfu re-indexado. El siguiente ejemplo ilustra este comportamiento:

El resultado del ejemplo sera:Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5)Array()Array( [5] => 6)Array( [0] => 6 [1] => 7)Funciones tilesHay un buen nmero de funciones tiles para trabajar con arrays. Vase la seccinfunciones de array.Nota:La funcinunset()permite remover claves de unarray. Tenga en cuenta que el arraynoes re-indexado. Si se desea un verdadero comportamiento "eliminar y desplazar", elarraypuede ser re-indexado usando la funcinarray_values().

La estructura de controlforeachexiste especficamente paraarrays. sta provee una manera fcil de recorrer unarray.Recomendaciones sobre arrays y cosas a evitarPor qu es incorrecto$foo[bar]?Siempre deben usarse comillas alrededor de un ndice de array tipo string literal. Por ejemplo,$foo['bar']es correcto, mientras que$foo[bar]no lo es. Pero por qu? Es comn encontrar este tipo de sintaxis en scripts viejos:

Esto est mal, pero funciona. La razn es que este cdigo tiene una constante indefinida (bar) en lugar de unstring('bar' - observe las comillas). Puede que en el futuro PHP defina constantes que, desafortunadamente para tales tipo de cdigo, tengan el mismo nombre. Funciona porque PHP automticamente convierte unstring puro(unstringsin comillas que no corresponde con ningn smbolo conocido) en unstringque contiene elstringpuro. Por ejemplo, si no se ha definido una constante llamadabar, entonces PHP reemplazar su valor por elstring'bar'y usar ste ltimo.Nota:Esto no quiere decir quesiemprehaya que usar comillas en la clave. No use comillas con claves que seanconstantesovariables, ya que en tal caso PHP no podr interpretar sus valores.