SlideShare uma empresa Scribd logo
1 de 47
Arrays

Un array (matriz) en PHP es en realidad un mapa ordenado. Un mapa es un tipo de
datos que asocia valores con claves. Este tipo es optimizado para varios usos
diferentes; puede ser usado como una matriz real, una lista (vector), tabla asociativa
(caso particular de implementación de un mapa), diccionario, colección, pila, cola y
probablemente más. Ya que los valores de un array pueden ser otros array, también es
posible crear árboles y array multidimensionales.

Una explicación sobre tales estructuras de datos se encuentra por fuera del propósito
de este manual, pero encontrará al menos un ejemplo de cada uno de ellos. Para más
información, consulte la extensa literatura que existe sobre este amplio tema.

Sintaxis

Especificación con array()

Un valor array puede ser creado por la construcción de lenguaje array(). Ésta toma un
cierto número de parejas clave => valor separadas con coma.

array( key => value
      , ...
      )
// key puede ser un integer o string
// value puede ser cualquier valor
<?php
$arr = array("foo" => "bar", 12 => true);

echo $arr["foo"]; // bar
echo $arr[12]; // 1
?>

Un key puede ser un integer o bien un string. Si una clave es la representación
estándar de un integer, será interpretada como tal (es decir, "8" será interpretado
como 8, mientras que "08" será interpretado como "08"). Los valores float en key
serán truncados a valores tipo integer. Los tipos de arrays indexados y asociativos son
el mismo tipo en PHP, el cual pueden contener índices tipo integer o string.

Un valor puede ser de cualquier tipo en PHP.

Nota:

Intentar acceder a un array cuya key no está defina es lo mismo que acceder a
cualquier otra variable no definida: Se producirá un error de nivel E_NOTICE, y el
resultado será NULL.

<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

echo $arr["somearray"][6]; // 5
echo $arr["somearray"][13]; // 9
echo $arr["somearray"]["a"]; // 42
?>

Si no especifica una key para un valor dado, entonces es usado el máximo de los
índices integer, y la nueva key será ese valor máximo más 1. Si se especifica una key
que ya tiene un valor asignado, ése valor será sobrescrito.

<?php
// Este array es lo mismo que...
array(5 => 43, 32, 56, "b" => 12);

// ...este array
array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
?>

                                      Advertencia

Antes de PHP 4.3.0, agregar un elemento a un array cuya key máxima actual es un
valor negativo creaba una nueva key como se ha descrito anteriormente. A partir de
PHP 4.3.0, la nueva key será 0.

Al usar TRUE como key, el valor será evaluado al integer 1. Al usar FALSE como key, el
valor será evaluado al integer0. Al usar NULL como key, el valor será evaluado a un
string vacío. El uso de un string vacío como key creará (o reemplazará) una key con un
string vacío y su valor; no es lo mismo que usar corchetes vacíos.

Arrays y objetos no pueden ser usados como keys. Al hacerlo se producirá una
advertencia: Illegal offset type.

Creación/modificación con sintaxis de corchetes cuadrados

Es posible modificar un array existente al definir valores explícitamente en él.

Esto es posible al asignar valores al array al mismo tiempo que se especifica la key
entre corchetes. También es posible omitir la key, lo que resulta en una pareja de
corchetes vacíos ([]).

$arr[key] = value;
$arr[] = value;
// key puede ser un integer o un string
// value puede ser cualquier valor

Si $arr no existe aun, será creada, así que ésta es también una forma alternativa de
crear un array. Para modificar un cierto valor, simplemente asigne un nuevo valor a un
elemento usando su key. Para remover una pareja key/valor, use la función unset()
sobre ella.

<?php
$arr = array(5 => 1, 12 => 2);

$arr[] = 56; // Esto es igual que $arr[13] = 56;
// en este punto del script
$arr["x"] = 42; // Esto agrega un nuevo elemento a la
// array con la key "x"

unset($arr[5]); // Esto elimina el elemento del array

unset($arr); // Esto elimina el array completamente
?>

Nota:

Como se mencionó anteriormente, si no se especifica una key, entonces se toma el
máximo de los índices integer existentes, y la nueva key será ese valor máximo más 1.
Si no existen índices integer aun, la clave será 0 (cero).

Note que el entero máximo usado en la key para este caso no necesita existir
actualmente en el array. Tan solo debe haber existido en el array en algún punto
desde que el array haya sido re-indexado. El siguiente ejemplo ilustra este caso:

<?php
// Crea un array simple.
$array = array(1, 2, 3, 4, 5);
print_r($array);

// Ahora eliminar cada ítem, pero dejar el array mismo intacto:
foreach ($array as $i => $value) {
unset($array[$i]);
}
print_r($array);

// Agregar un ítem (note que la nueva key es 5, en lugar de 0).
$array[] = 6;
print_r($array);

// Re-indexar:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>

El resultado del ejemplo sería:

 Array
 (
     [0] => 1
     [1] => 2
     [2] => 3
     [3] => 4
     [4] => 5
)
 Array
 (
 )
 Array
 (
     [5] => 6
 )
 Array
 (
     [0] => 6
     [1] => 7
 )

Funciones útiles

Existe un buen número de funciones útiles para trabajar con array. Consulte la sección
funciones de arrays.

Nota:

La función unset() le permite eliminar keys de un array. Tenga en cuenta que el array
no es re-indexado. Si desea el comportamiento real de "eliminar y desplazar", el array
puede ser re-indexado usando la función array_values().

<?php
$a = array(1 =>   'one', 2 => 'two', 3 => 'three');
unset($a[2]);
/* producirá un   array que hubiera sido definida como
$a = array(1 =>   'one', 3 => 'three');
y NO
$a = array(1 =>   'one', 2 =>'three');
*/

$b = array_values($a);
// Ahora $b es array(0 => 'one', 1 =>'three')
?>

La estructura de control foreach existe específicamente para arrays. Ésta provee una
manera fácil de recorrer un array.

Recomendaciones sobre arrays y cosas a evitar

¿Por qué es incorrecto $foo[bar]?
Siempre deben usarse comillas alrededor de un índice de array tipo cadena literal. Por
ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es. ¿Pero por qué? Es
común encontrar este tipo de sintaxis en scripts viejos:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

Esto está mal, pero funciona. La razón es que este código tiene una constante
indefinida (bar) en lugar de un valor string ('bar' - note las comillas). Puede que en el
futuro PHP defina constantes que, desafortunadamente para tal tipo de código, tengan
el mismo nombre. Funciona porque PHP automáticamente convierte una cadena pura
(un string sin comillas que no corresponda con símbolo conocido alguno) en un string
que contiene la cadena pura. Por ejemplo, si no se ha definido una constante llamada
bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última.

Nota: Esto no quiere decir que siempre haya que usar comillas en la clave. No use
comillas con claves que sean constantes o variables, ya que en tal caso PHP no podrá
interpretar sus valores.

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('html_errors', false);
// Array simple:
$array = array(1, 2);
$count = count($array);
for ($i = 0; $i < $count; $i++) {
echo "nRevisando $i: n";
echo "Mal: " . $array['$i'] . "n";
echo "Bien: " . $array[$i] . "n";
echo "Mal: {$array['$i']}n";
echo "Bien: {$array[$i]}n";
}
?>

El resultado del ejemplo sería:

Revisando 0:
Notice: Undefined index:     $i in /path/to/script.html on line 9
Mal:
Bien: 1
Notice: Undefined index:     $i in /path/to/script.html on line 11
Mal:
Bien: 1

Revisando 1:
Notice: Undefined index:     $i in /path/to/script.html on line 9
Mal:
Bien: 2
Notice: Undefined index:     $i in /path/to/script.html on line 11
Mal:
Bien: 2

Más ejemplos para demostrar este comportamiento:

<?php
// Mostrar todos los errores
error_reporting(E_ALL);

$arr = array('fruit' => 'apple', 'veggie' => 'carrot');

// Correcto
print $arr['fruit']; // apple
print $arr['veggie']; // carrot

// Incorrecto. Esto funciona pero también genera un error de PHP de
// nivel E_NOTICE ya que no hay definida una constante llamada fruit
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit]; // apple

// Esto define una constante para demostrar lo que pasa. El valor 'veggie'
// es asignado a una constante llamada fruit.
define('fruit', 'veggie');

// Note la diferencia ahora
print $arr['fruit']; // apple
print $arr[fruit]; // carrot

// Lo siguiente está bien ya que se encuentra al interior de una cadena. Las
constantes no son procesadas al
// interior de cadenas, así que no se produce un error E_NOTICE aquí
print "Hello $arr[fruit]"; // Hello apple

// Con una excepción, los corchetes que rodean las matrices al
// interior de cadenas permiten el uso de constantes
print "Hello {$arr[fruit]}"; // Hello carrot
print "Hello {$arr['fruit']}"; // Hello apple

// Esto no funciona, resulta en un error de intérprete como:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Esto por supuesto se aplica también al uso de superglobales en cadenas
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";

// La concatenación es otra opción
print "Hello " . $arr['fruit']; // Hello apple
?>

Cuando se habilita error_reporting para mostrar errores de nivel E_NOTICE (como por
ejemplo definiendo el valor E_ALL), este tipo de usos serán inmediatamente visibles.
Por omisión, error_reporting se encuentra configurado para no mostrarlos.
Tal y como se indica en la sección de sintaxis, lo que existe entre los corchetes
cuadrados ('[' y ']') debe ser una expresión. Esto quiere decir que código como el
siguiente funciona:

<?php
echo $arr[somefunc($bar)];
?>

Este es un ejemplo del uso de un valor devuelto por una función como índice del array.
PHP también conoce las constantes:

<?php
$error_descriptions[E_ERROR] = "Un error fatal ha ocurrido";
$error_descriptions[E_WARNING] = "PHP produjo una advertencia";
$error_descriptions[E_NOTICE] = "Esta es una noticia informal";
?>

Note que E_ERROR es también un identificador válido, asi como bar en el primer
ejemplo. Pero el último ejemplo es equivalente a escribir:

<?php
$error_descriptions[1] = "Un error fatal ha ocurrido";
$error_descriptions[2] = "PHP produjo una advertencia";
$error_descriptions[8] = "Esta es una noticia informal";
?>

ya que E_ERROR es igual a 1, etc.

¿Entonces porqué está mal?

En algún momento en el futuro, puede que el equipo de PHP quiera usar otra constante
o palabra clave, o una constante proveniente de otro código puede interferir. Por
ejemplo, en este momento no puede usar las palabras empty y default de esta forma,
ya que son palabras clave reservadas.

Nota: Reiterando, al interior de un valor string entre comillas dobles, es válido no
rodear los índices de matriz con comillas, así que "$foo[bar]" es válido. Consulte los
ejemplos anteriores para más detalles sobre el porqué, así como la sección sobre
procesamiento de variables en cadenas.

Conversión a array

Para cualquiera de los tipos: integer, float, string, boolean y resource, convertir un
valor a un array resulta en un array con un solo elemento, con índice 0, y el valor del
escalar que fue convertido. En otras palabras, (array)$scalarValue es exactamente lo
mismo que array($scalarValue).

Si convierte un object a un array, el resultado es un array cuyos elementos son las
propiedados del object. Las keys son los nombres de las variables miembro, con
algunas excepciones notables: las variables privadas tienen el nombre de la clase al
comienzo del nombre de la variable; las variables protegidas tienen un caracter '*' al
comienzo del nombre de la variable. Estos valores adicionados al inicio tienen bytes
nulos a los lados. Esto puede resultar en algunos comportamientos inesperados:

<?php

class A {
private $A; // Este campo se convertirá en '0A0A'
}

class B extends A {
private $A; // Este campo se convertirá en '0B0A'
public $AA; // Este campo se convertirá en 'AA'
}

var_dump((array) new B());
?>

En el ejemplo anterior parecerá que se tienen dos claves llamadas 'AA', aunque en
realidad una de ellas se llama '0A0A'.

Si convierte un valor NULL a array, obtiene un array vacío.

Comparación

Es posible comparar arrays con la función array_diff() y mediante operadores de
arrays.

Ejemplos

El tipo matriz en PHP es bastante versátil. Aquí hay algunos ejempos:

<?php
// Esto:
$a = array( 'color' => 'red',
'taste' => 'sweet',
'shape' => 'round',
'name' => 'apple',
4 // la clave será 0
);

$b = array('a', 'b', 'c');

// . . .es completamente equivalente a
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name'] = 'apple';
$a[] = 4; // la clave será 0

$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

//    Después de que se ejecute el código, $a será el array
//    array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round',
//    'name' => 'apple', 0 => 4), y $b será el array
//    array(0 => 'a', 1 => 'b', 2 => 'c'), o simplemente array('a', 'b', 'c').
?>

   Ejemplo #1 Uso de array()
<?php
// Array como mapa de propiedades
$map = array( 'version' => 4,
'OS' => 'Linux',
'lang' => 'english',
'short_tags' => true
);

// Keys estrictamente numéricas
$array = array( 7,
8,
0,
156,
-10
);
// esto es lo mismo que array(0 => 7, 1 => 8, ...)

$switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (el índice entero máximo era 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // el valor 10 será reemplazado por 12
);

// array vacío
$empty = array();
?>

  Ejemplo #2 Colección
<?php
$colors = array('rojo', 'azul', 'verde', 'amarillo');

foreach ($colors as $color) {
echo "¿Le gusta el $color?n";
}

?>

El resultado del ejemplo sería:

¿Le    gusta   el   rojo?
¿Le    gusta   el   azul?
¿Le    gusta   el   verde?
¿Le    gusta   el   amarillo?
Modificar los valores del array directamente es posible a partir de PHP 5, pasándolos
por referencia. Las versiones anteriores necesitan una solución alternativa:

  Ejemplo #3 Cambiando elemento en el bucle
<?php
// PHP 5
foreach ($colors as &$color) {
$color = strtoupper($color);
}
unset($color); /* se asegura de que escrituras subsiguientes a $color
no modifiquen el último elemento del arrays */

// Alternativa para versiones anteriores
foreach ($colors as $key => $color) {
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>

El resultado del ejemplo sería:

Array
(
    [0]   =>   ROJO
    [1]   =>   AZUL
    [2]   =>   VERDE
    [3]   =>   AMARILLO
)

Este ejemplo crea un array con base uno.

   Ejemplo #4 Índice con base 1
<?php
$firstquarter = array(1 => 'Enero', 'Febrero', 'Marzo');
print_r($firstquarter);
?>

El resultado del ejemplo sería:

Array
(
    [1] => 'Enero'
    [2] => 'Febrero'
    [3] => 'Marzo'
)

  Ejemplo #5 Llenado de un array
<?php
// llenar un array con todos los ítems de un directorio
$handle = opendir('.');
while (false !== ($file = readdir($handle))) {
$files[] = $file;
}
closedir($handle);
?>

Los Arrays son ordenados. El orden puede ser modificado usando varias funciones de
ordenado. Vea la sección sobre funciones de arrays para más información. La función
count() puede ser usada para contar el número de elementos en un array.

   Ejemplo #6 Ordenado de un array
<?php
sort($files);
print_r($files);
?>

Dado que el valor de un array puede ser cualquier cosa, también puede ser otro array.
De esta forma es posible crear arrays recursivas y multi-dimensionales.

   Ejemplo #7 Arrays recursivos y multi-dimensionales
<?php
$fruits = array ( "fruits" => array ( "a" => "orange",
"b" => "banana",
"c" => "apple"
),
"numbers" => array ( 1,
2,
3,
4,
5,
6
),
"holes" => array ( "first",
5 => "second",
"third"
)
);

// Algunos ejemplos que hacen referencia a los valores del array anterior
echo $fruits["holes"][5]; // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]); // remove "first"

// Crear una nueva array multi-dimensional
$juices["apple"]["green"] = "good";
?>

La asignación de arrays siempre involucra la copia de valores. Use el operador de
referencia para copiar un array por referencia.

<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 ha cambiado,
// $arr1 sigue siendo array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // ahora $arr1 y $arr3 son iguales
?>




Objetos    Cadenas

[edit] Last updated: Fri, 27 Jan 2012
  User Contributed NotesArrays
Anonymous27-Oct-2011 05:00
This is a simple solution for taking previous and next items, even if we are at
the ends of the array.

<?php

$current_key; // the key of the item we want to search from

if (isset($array[$current_key+1])) {

$array_next = $array[$current_key+1]; // get the next item if there is

} else {

$array_next = $array[0]; // if not take the first (this means this is the end of
the array)

}

if (isset($array[$current_key-1])) {

$array_prev = $array[$current_key-1]; // get the previous item if there is

} else {

$array_prev = $array[count($array)-1]; // if not take the last item (this means
this is the beginning of the array)

}

?>
prince at 3ddatalabs dot com26-Oct-2011 06:02
Hi, you also can try goAssocArrayNumeric() on two-dimensional or three-
dimensional arrays.

<?php
//Now it's a two-dimensional array
$myTwoDimArray =
array('a'=>array('a0'=>'apple','a1'=>'avocado','a2'=>'apricot'),
'b'=>array('b0'=>'banana','b1'=>'blackberry','b2'=>'breadfruit'),
'c'=>array('c0'=>'carrot','c1'=>'coco','c2'=>'coffee'));

echo $myTwoDimArray[0][0]; //won't work! But,
//using the same function used to access associative arrays numerically, we may
access 2-dimensional arrays numerically.
function goAssocArrayNumeric($arrAssoc, $key=-1)
{
$i = -1;
foreach ($arrAssoc as $k => $v)
{
$i++;
if($i == $key)
{
return $v;
}
}
return FALSE;
}

//usage: applying it twice.
echo goAssocArrayNumeric(goAssocArrayNumeric($myTwoDimArray,0),0);//apple
echo goAssocArrayNumeric(goAssocArrayNumeric($myTwoDimArray,2),1);//coco
echo goAssocArrayNumeric(goAssocArrayNumeric($myTwoDimArray,2),2);//coffee
?>
Thanks!
Prince.
prince at 3ddatalabs dot com26-Oct-2011 09:35
Hi, here's a way to access an associative array via it's numeric index.
<?php
//sample associative array:
$myAssocArray = array('a'=>'apple', 'b'=>'banana', 'c'=>'carrot', 'd'=>'dragon
fruit');

echo $assocArray[0];
//Above won't work! Because you can't access an associative array numerically.
But,

function goAssocArrayNumeric($arrAssoc, $key=-1)
{
$i = -1;
foreach ($arrAssoc as $k => $v)
{
$i++;
if ($i == $key)
{
return $v;
}
}
return FALSE;
}

//usage:
echo goAssocArrayNumeric($myAssocArray,0);//apple
echo goAssocArrayNumeric($myAssocArray,3);//dragon fruit
?>
Hope it helps!
Thanks.
Zane MegaLab.it22-Aug-2011 02:10
Beware: you can't access an associative array via it's numeric index:

<?php
$a = array(
'foo' => 'bar',
'sasfas' => 'addasda',
'safafsa' => 'hfdhfdf'
);

echo $a[0]; // Undefined index, not 'bar'

?>
mlvljr20-May-2011 06:37
please note that when arrays are copied, the "reference status" of their members
is preserved (http://www.php.net/manual/en/language.references.whatdo.php).
abimaelrc10-May-2011 05:15
This is another way to get value from a multidimensional array, but for versions
of php >= 5.3.x
<?php
function array_value_recursive($key, array $arr){
$val = null;
array_walk_recursive($arr, function($v, $k) use($key, &$val){
$val = $k == $key ? $v : (!is_null($val) ? $val : false);
});
return $val;
}

$arr = array(
'foo' => 'foo',
'bar' => array(
'baz' => 'baz',
'candy' => 'candy',
'vegetable' => array(
'carrot' => 'carrot',
)
),
'fruits' => 'fruits',
);

var_dump(array_value_recursive('carrot', $arr)); // string(6) "carrot"
var_dump(array_value_recursive('apple', $arr)); // bool(false)
var_dump(array_value_recursive('baz', $arr)); // string(3) "baz"
var_dump(array_value_recursive('candy', $arr)); // string(5) "candy"
var_dump(array_value_recursive('pear', $arr)); // bool(false)
?>
chris AT cmbuckley DOT co DOT uk30-Apr-2011 04:45
Possibly unexpected behaviour:

<?php

$array = array();
var_dump($array['key']); // E_NOTICE (undefined key)

$null = null;
var_dump($null['key']); // no E_NOTICE

?>
Ganpat Thakur07-Apr-2011 10:33
I was in need to get value of key which resides at any level in an
multidimensional array. Unfortunately there is no such array function. So I
write my own as below...

<?php
function array_get_key_val($key, $heystack) {
if (is_array($heystack)) {
foreach ($heystack as $k => $v) {
if ($k == $key) {
return $v;
}
elseif (is_array($v)) {
return array_get_key_val($key, $v);
}
}
}
return FALSE;
}
?>

Hope this will help to few.
anhsang9x at gmail dot com25-Mar-2011 06:09
I'm want to save values in array and display its, can to simple way:

<?php
$arr1 = array();//begin array

$index = 0;//array's index

$value_return = array();//Values me need
for($i = 0; $i<10; $i++)
{
$arr1[$i] = rand(10, 100);//use to be function random for get values from 10 to
100.

if($arr1[$i]%2 == 0)//Get values me need.
{
$value_return[$index] = $arr1[$i];//save values in this array
$index += 1;//get space save for index.
}
}

//display result.
foreach($value_return as $value_display)
echo "</br>".$value_display."</br>";

print_r($arr1);
?>
lemurjan at gmail dot com10-Mar-2011 04:54
Sometimes you may need an array of constants including concatenated strings.
That works fine in this case:

<?php
define("GLUE", "&");

function array_to_string($a) {
$r = "";
foreach ($a as $key => $value) { $r .= "$key => $value<br>"; };
return $r;
}
// DECLARING ARRAY (1)
$array = array("one", "two", "one".GLUE."two");

echo array_to_string($array);
?>

This seems rather strange behavior in a CLASS nevertheless:

<?php
class wrong_class {
// DECLARING ARRAY (2)
private $array = array("one", "two", "one".GLUE."two");
function __toString() {
return array_to_string($this->array);
}
}
$wc = new wrong_class();
echo $wc;
/*
Parse error: parse error, expecting `')'' in ... code on line 21
*/
?>

Anyway, if you force this declaring method inside a CLASS, you could change the
object map directly:

<?php
class proper_class {
function __construct() {
// DECLARING ARRAY (3)
$this->array = array("one", "two", "one".GLUE."two");
}
function __toString() {
return array_to_string($this->array);
}
}
$pc = new proper_class();
echo $pc;
?>
falkon303 at gmail dot com30-Jan-2011 01:08
Multidimensional arrays work great for checking search options if they exist in
a $_GET string. The following saved me a lot of time.

<?php
$advanced_option['color'] = array("red", "blue", "green");
$advanced_option['state'] = array("new", "broken");
$advanced_option['state'] = array("on","off");

foreach($advanced_option as $y => $advanced_option[$y])
{

// HERE WARE ARE GOING INTO EACH ARRAY'S VALUES/ITEMS
$sub_array = $advanced_option[$y];
foreach($sub_array as $z => $sub_array[$z])
{
// IF THE SEARCH OPTI0N EXISTS IN THE GET STRING, SET AN ARRAY NAMED AFTER THAT
VALUE TO BE CHECKED (FOR CHECKBOXES & RADIOBUTTONS)
if ($_GET[$y] == $advanced_option[$y][$z])
{
$checked[$advanced_option[$y][$z]] = "checked";
}
}
}

?>
Anonymous23-Nov-2010 02:27
In case you had to get an element from a function-returned array without having
to save the array to a variable, here's a workaround I've come up with.

<?php
$stuff = 'something random here';

// To get the first element in the array, use reset
echo reset(explode(' ', $stuff));
// Returns "something"

// To get the last element, use end
echo end(explode(' ', $stuff));
// Returns "here"

// For an in-between element, you can use array_search on the flipped array
$i = 1; //key for the element
echo array_search($i, array_flip(explode(' ', $stuff)));
// Returns "random"
?>
Flappi28220-Aug-2010 10:03
Heres a simple function I wrote to remove a value from an array, without leaving
a hole:

<?php
function removeFromArray(&$array, $key){
foreach($array as $j=>$i){
if($i == $key){
$array = array_values(unset($array[$j]));
return true;
break;
}
}
?>
Returns true on success, or false on failure. The array will be automatically
updated
Walter Tross12-Aug-2010 11:04
It is true that "array assignment always involves value copying", but the copy
is a "lazy copy". This means that the data of the two variables occupy the same
memory as long as no array element changes.

E.g., if you have to pass an array to a function that only needs to read it,
there is no advantage at all in passing it by reference.
ivegner at yandex dot ru22-Jul-2010 04:20
Like in Perl, you can use curly braces ({}) instead of square brackets ([]) to
access array members:

<?php
$a = array ();
$a[7] = 'seven';
$a{'hello'} = 'world';
print $a{7} . ' ' . $a['hello'];
?>

Prints 'seven world'.
william at cycronsystems dot com09-Jun-2010 04:28
I couldn't find a way to Trim an array in PHP so i wrote this little function
that seemed to do the trick. It will trim the array down to a specified size

<?php

//Utility Function to Trim Array
function trim_array(array $array,$int){
$newArray = array();
for($i=0; $i<$int; $i++){
array_push($newArray,$array[$i]);
}
return (array)$newArray;
}

?>

Example:
var_dump($treatList);
array(3) {
["id"]=>
string(3) "476"
["categoryID"]=>
string(2) "49"
["title"]=>
string(55) "80% off Sidewalk Crawling Classes from Urban Adventures"

$treatList = trim_array($listist,2);
Will result in:
var_dump($treatList);
array(2) {
["id"]=>
string(3) "476"
["categoryID"]=>
string(2) "49"
zachera03-Jun-2010 12:39
function array_closest_key($needle,$haystack){
foreach($haystack as $key => $value){
if($needle <= $value){
return $key;
}
}
}

Get the closest key to the specified $needle out of $haystack.
dtomasiewicz at gmail dot com12-May-2010 10:42
<?php
/**
* Functions for examining and manipulating matrices (n-dimensional arrays) of
data
* with string dot-separated paths. For example, you might do this with
multidimensional
* array:
* $var = $array['someKey']['cats']['dogs']['potato'];
*
* Accomplishing this can be a nightmare if you don't know the depth of the path
or the array
* is of a variable dimension.
*
* You can accomplish the same by using $array as a Matrix:
* $array = new Matrix($array);
* $var = $array->get('someKey.cats.dogs.potato);
*
* @author Daniel Tomasiewicz <www.fourstaples.com>
*/
class Matrix {
private $data;

public function __construct(array $data = array()) {
$this->data = $data;
}

/**
* Gets the value at the specified path.
*/
public function get($path = null) {
if($path === null) {
return $this->data;
}

$segs = explode('.', $path);

$target =& $this->data;
for($i = 0; $i < count($segs)-1; $i++) {
if(isset($target[$segs[$i]]) && is_array($target[$segs[$i]])) {
$target =& $target[$segs[$i]];
} else {
return null;
}
}

if(isset($target[$segs[count($segs)-1]])) {
return $target[$segs[count($segs)-1]];
} else {
return null;
}
}

/**
* Sets a value to a specified path. If the provided value is
* null, the existing value at the path will be unset.
*/
public function set($path, $value = null) {
if(is_array($path)) {
foreach($path as $p => $v) {
$this->set($p, $v);
}
} else {
$segs = explode('.', $path);

$target =& $this->data;
for($i = 0; $i < count($segs)-1; $i++) {
if(!isset($target[$segs[$i]])) {
$target[$segs[$i]] = array();
}

$target =& $target[$segs[$i]];
}

if($segs[count($segs)-1] == '*') {
foreach($target as $key => $value) {
$target[$key];
}
} elseif($value === null && isset($target[$segs[count($segs)-1]])) {
unset($target[$segs[count($segs)-1]]);
} else {
$target[$segs[count($segs)-1]] = $value;
}
}
}

/**
* Returns a flattened version of the data (one-dimensional array
* with dot-separated paths as its keys).
*/
public function flatten($path = null) {
$data = $this->get($path);

if($path === null) {
$path = '';
} else {
$path .= '.';
}
$flat = array();

foreach($data as $key => $value) {
if(is_array($value)) {
$flat += $this->flatten($path.$key);
} else {
$flat[$path.$key] = $value;
}
}

return $flat;
}

/**
* Expands a flattened array to an n-dimensional matrix.
*/
public static function expand($flat) {
$matrix = new Matrix();

foreach($flat as $key => $value) {
$matrix->set($key, $value);
}

return $matrix;
}
}
?>
john at nowhere dot com18-Dec-2009 09:33
If you ever wondered if you can do something like:

<?php
$a = function_that_returns_an_array()['some_index']['some_other_index'] ;
?>

The answer is no, you can't. But you can use the following function. I named it
i() because it's a short name and stands for "to index".

<?php

/**
* Usage: i( $array, $index [, $index2, $index3 ...] )
*
* This is functionally equivalent to $array[$index1][$index2][$index3]...
*
* It can replace the more prolix
*
* $tmp = some_function_that_returns_an_array() ;
* $value = $tmp['some_index']['some_other_index'] ;
*
* by doing the job with a single line of code as in
*
* $value = i( some_function_that_returns_an_array(), 'some_index',
'some_other_index' ) ;
*
* Note that since this function is slower than direct indexing, it should only
be used in cases like the one
* described above, for improving legibility.
*
* @param $array
* @param $index
* @param [optional] $index2, index3, ...
* @throws Exception when the indexes do not exist
*/
function i(){
$args = func_get_args();
$array = $args[0];//gets the fist parameter, $array
$indexes = $args;
unset($indexes[0]);//because indexes[0] is actually not an index, but the first
parameter, $array
foreach( $indexes as $index ){
if( (! is_array($array)) || (! array_key_exists( $index, $array )) ){
throw new Exception("Array index out of bounds.
Parameters:".print_r($args,true));
}
$array = $array[$index];
}
return $array;
}

?>
aaron at tekserve dot com24-Oct-2009 06:16
Here's a function to recursively convert objects to arrays and remove the
special characters from private and protected variables. I use it with
XML_Serializer to convert objects to XML.

<?php
function object_to_array($mixed) {
if(is_object($mixed)) $mixed = (array) $mixed;
if(is_array($mixed)) {
$new = array();
foreach($mixed as $key => $val) {
$key = preg_replace("/^0(.*)0/","",$key);
$new[$key] = object_to_array($val);
}
}
else $new = $mixed;
return $new;
}
?>
unix at bujanoci dot net20-Oct-2009 10:55
Just in case someone finds it usefull.
If you want to capitalize the first letter of each word in the array you could:
<?php
$myarray = array("one","two","three","four","etc..");

$map = array_map('ucfirst', $myarray);

$j = join(' , ', $map);
echo $j;
?>

This will return: One , Two , Three , Four , Etc..
Probably it's not worth of posting it, but just thought beginners might find it
usefull.
Anonymous02-Oct-2009 04:33
This is a modification of a function like this which works with two dimensional
arrays. Pass a 2d array to this function and my function will return an array of
the arrays with the specified key-value pair (specified by $key and $value).

<?php
function seekKey($array, $key, $value)
{
$ret = array();
for ($i=0;$i<count($array);$i++)
{
if ($array[$i][$key]==$value)
$ret[] = $array[$i];
}
return $ret;
}
?>
Martin28-Sep-2009 11:04
You can actually create arrays in arrays; just consider the following code:

<?php
function LoadData($file)
{
$lines = file($file) or die('Could not open file');
foreach($lines as $line)
{
$i[] = array($line);
print_r($i[1])
}
LoadData('file.csv');

?>

A (.csv-)file is loaded into the function LoadData and stored in the array
$lines. Then foreach puts the values from the $lines-array into $line and $i is
defined as an array of the array $line. Please note that this type of code could
take up much of CPU-usage; it generates a multi-dimensional array.

When $i is printed (in the example, value 1 of the array) it would display:

Array ( [0] => Array (
[0] => 7;75;X;0;0;1;0;3;Gr;Br;Do;0;0;0;0;0;0;0;0;
[1] => ;200;K;0;0;0;0;0;Gr;0;0;0;0;ZL;0;0;0;0;0;
[2] => ;260;Z;;;;;;Gr;;;;;VL;;;;;;
[3] => ;270;K;;;;1;;Gr;Br;Li;;;;;;;;;
[4] => ;500;V;;;;;;Br;;;;;;;;;;;
[5] => 6;60;X;;;;;;;;;;;;;;;;;
[6] => ;80;K;;;;;;Gr;;;;;ZL;;;;;;
[7] => ;210;Z;;;;;;Gr;;;;;;;;;;;
)
webmaster at oehoeboeroe dot nl04-May-2009 07:47
A simple function to check if you can use your variable as an array offset
validly and without getting it typecasted.

<?php
function is_safe_offset($offset) {
return array_pop(@array_flip(array($offset => 0))) === $offset;
}

$a = 8;
var_dump(is_safe_offset($a)); // true

$b = '8';
var_dump(is_safe_offset($b)); // false

$c = '08';
var_dump(is_safe_offset($c)); // true

$d = 'foo';
var_dump(is_safe_offset($d)); // true

$e = 3.8;
var_dump(is_safe_offset($e)); // false

$f = false;
var_dump(is_safe_offset($f)); // false

$g = null;
var_dump(is_safe_offset($g)); // false

$h = array();
var_dump(is_safe_offset($h)); // false

$i = new StdClass;
var_dump(is_safe_offset($i)); // false
?>
genix at arctoz dot de07-Mar-2009 04:41
Hello,

to check if an element was set is actually pretty simple:

<?php

$array = ('first' => 1,
'sec' => 2
);

$out = (isset($array['third'])) ? $array['third'] : 'third not set...';

echo $out;
?>

greets,
genix
Dawid Krysiak17-Dec-2008 03:09
Trying to get array element that was not set, throws ERROR_NOTICE and returns
NULL. Example:
<?php /* php v.4.4.7 */
$array = array(
'apple' => 'green',
'orange' => 'orange',
);
$pear_color = $array['pear']; // Notice: Undefined index: pear in
/path/to/file.php on line 123
var_dump($pear_color); // NULL
?>
Haven't found that mentioned on this page.
hek at theeks dot net24-Oct-2008 08:58
Note that NULL is not exactly a scalar value, so the following two lines of code
do NOT produce identical arrays.

<?php
$x = (array) null; // $x ends up an empty array (zero elements)
$y = array(null); // $y ends up an array containing one element (a null)
?>
pinkgothic at gmail dot com13-Sep-2008 08:49
Re: fmouse,

the phenomenom you're describing pertains to superglobals, not arrays, and it
only applies in a very specific scope. Check out
http://de.php.net/manual/en/language.variables.variable.php :

"Please note that variable variables cannot be used with PHP's Superglobal
arrays within functions or class methods. The variable $this is also a special
variable that cannot be referenced dynamically."
frywater04-Jun-2008 04:43
> fmouse

Variable variables can be used with arrays as discussed in the variable variable
section.
Also, from your code, $somevar can be an array and still work fine.

$fum = "somevar";
$$fum = array(); // $somevar is now an array
$foo = $$fum;
print_r( $foo); // we get an empty array printed

print_r() doesn't just print arrays, it prints any variable type.
If you pass it a variable, that hasn't been defined yet, it won't know how to
print it.

You would get this same results by passing any undefined variable such as:
print_r( $bar ); // PHP Notice: undefined variable ...$bar
fmouse at fmp dot com29-Apr-2008 01:14
Using variables as array names no longer works in PHP5.

$fum = "somevar";
$foo = $$fum;

# Still works if $somevar isn't an array. $foo contains the value of $somevar
but ....

$fum = "_POST";
print_r($$fum);
print_r(${$fum});

Neither form of indirection works in this context. $$fum comes back empty.

If you have PHP4 code that used this kind of indirection you can work around the
change in PHP5 using an eval().

$fum = "_POST";
$foo = eval("return $$fum;");
print_r($foo);

This works!
rama dot devi at gmail dot com18-Mar-2008 01:52
Sorting double dimensional arrays by a specified key bothe for Strings and for
integers:
Ex:

$personDetails = array( array("firstName" => "Nancy", "lastName" => "Grace",
"age" => 22), array("firstName" => "Andy", "lastName" => "Peter", "age" => 28),
array("firstName" => "Jim", "lastName" => "Gary", "age" => 25),
array("firstName" => "Lary", "lastName" => "James", "age" => 28),
array("firstName" => "Peter", "lastName" => "David", "age" => 17),
array("firstName" => "Raj", "lastName" => "King", "age" => 9), array("firstName"
=> "John", "lastName" => "Baxter","age" => 35) );
//To sort the array by firstName:-
function sortFirstName($p1, $p2) {
return strnatcmp($p1['firstName'], $p2['firstName']);
}
usort($personDetails, 'sortFirstName');

//To sort by an integer Field

function sortByInteger(&$personDetails, $field) {
$sort = "return strnatcmp($p1['$field'], $p2['$field']);";
usort($personDetails, create_function('$p1,$p2', $sort));
return $personDetails;
}

$personDetails = sortByInteger($personDetails, 'age');
//To sort the array in Descending order by a key, It can be done by adding "-"
sign before strnatcmp() function.

I hope this helps
ken underscore yap atsign email dot com09-Jan-2008 08:00
"If you convert a NULL value to an array, you get an empty array."

This turns out to be a useful property. Say you have a search function that
returns an array of values on success or NULL if nothing found.

$values = search(...);
Now you want to merge the array with another array. What do we do if $values is
NULL? No problem:

$combined = array_merge((array)$values, $other);

Voila.
pepesantillan at gmail dot com18-Dec-2007 04:25
z on 22-Apr-2005 12:10 wrote:
-----------------------------------------------
Here's a simple function to insert a value into some position in an array

<?php
function array_insert($array,$pos,$val)
{
$array2 = array_splice($array,$pos);
$array[] = $val;
$array = array_merge($array,$array2);

return $array;
}
?>

and now for example...
<?php
$a = array("John","Paul","Peter");
$a = array_insert($a,1,"Mike");
?>

Now $a will be "John","Mike","Paul","Peter"
-----------------------------------------------

Im learning to use PHP and reading about array_splice found that

<?php
function array_insert($array,$pos,$val)
{
$array2 = array_splice($array,$pos);
$array[] = $val;
$array = array_merge($array,$array2);

return $array;
}

$a = array("John","Paul","Peter");
$a = array_insert($a,1,"Mike");
print_r($a);
?>

would output the same as

<?php
$b = array("John","Paul","Peter");
array_splice($b,1,0,array("Mike"));
print_r($b);
?>
SID TRIVEDI10-Oct-2007 02:14
<?php

//Simple Login Script using associative array.

//You may modify the codes and use $_POST['FORM_FIELD_DATA'] for your web-page.
//You may spice-up the codes with more form field validation & security
features.

//$user_name=$_POST['user_name'];
//$password=$_POST['password'];

$test_user_name = 'michelle_smith'; //for testing purpose only
$test_password = 'msmith321'; //for testing purpose only
$user_name = $test_user_name;
$password = $test_password;

// here user_name is key and password is the value of an array..
// website owner has to add new user/site member manually in $login_array

$login_array = array(
'user_name' => 'password',
'alex_duff' => 'alx321',
'xena78' => 'xena321',
'dela_pena' => 'delp321',
'shawn_1981' => 'shw81',
'michelle_smith' => 'msmith321');

ksort ($login_array);
reset($login_array);
if (isset($login_array[$user_name]))
{
$pass_check = $login_array[$user_name];
if ($password === $pass_check)
{
echo "Welcome, $user_name!n<br>"; //may redirect to specific webpage.
}
else
{
echo "Please try again!"; //may redirect to Error page.
}
}
else
{
echo "Please register with us. Thanks!"; //may redirect to registration page.
exit();

}
echo("n<br>");
echo 'Thanks to Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans,
Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei
Zmievski for wonderful PHP!';
?>
carl at linkleaf dot com06-Sep-2007 11:36
Its worth noting that there does not appear to be any functional limitations on
the length or content of string indexes. The string indexes for your arrays can
contain any characters, including new line characters, and can be of any length:

<?php

$key = "XXXXX";
$test = array($key => "test5");

for ($x = 0; $x < 500; $x++) {
$key .= "X";
$value = "test" . strlen($key);
$test[$key] = $value;
}

echo "<pre>";
print_r($test);
echo "</pre>";

?>

Keep in mind that using extremely long array indexes is not a good practice and
could cost you lots of extra CPU time. However, if you have to use a long string
as an array index you won't have to worry about the length or content.
Gautam30-Aug-2007 01:56
<?php
//EXAMPLE of Multi-Dimentional Array where as an array's keys are an array
itself.
//It's so easy to create one like this.

$movie_to_watch = array ('Action'=>
array('Kanu Reeves' => 'Matrix Reloaded',
'Pearce Brosnan' => 'Die Another Day',
'Tom Cruz' => 'Mission Impossible',
'Jason Statham' => 'Crank',
'Danzel Washington' => 'Man on Fire'),
'Comedy' =>
array ('Charlie Chaplin' => 'City Lights',
'Jim Carrey' => 'Cable Guy',
'Rowan Atkinson' => 'The Ultimate Disaster'));
$type_wanted = 'Action'; //You may switch type from Action to Comedy.
$hero_wanted = 'Pearce Brosnan'; // You may switch hero from Pearce Brosnan to
Jim Carrey.

print ("$hero_wanted 's $type_wanted movie is " .
$movie_to_watch[$type_wanted][$hero_wanted].".");
// produces browser output as under:
// Pearce Brosnan 's Action movie is Die Another Day.
?>
Olegk, getmequick[at]gmail[dot]com21-Aug-2007 02:59
Hey..
here is a function which helps to avoid using empty/isset
checkings for arrays.

(it's acts simillar to 'default' modifier in Smarty)

Using this function you will avoid 'Undefined index' or
'Undefined offset' error.

<?php

$_POST['id']['other'] = 'val1';

/*
key exist (same as $_POST['id'][other])
*/
echo getRequestParam('id[other]', 'default value');

/*
key doesn't exist, we get default value (same as $_POST['var'])
*/

echo getRequestParam('var', 'default value');

function getRequestParam( $var, $default = '', $method = 'post' )
{
preg_match_all('!(w+)!i',$var, $match );
array_shift($match);
$_vars = $match[0];
$ret = null;

if( strtoupper($method) == 'POST' ) {
$ret = _findRequestParam($_vars, $_POST);
}
elseif( strtoupper($method) == 'GET' ) {
$ret = _findRequestParam($_vars, $_GET);
}
elseif( strtoupper($method) == 'COOKIE' ) {
$ret = _findRequestParam($_vars, $_COOKIE);

}
elseif( strtoupper($method) == 'SESSION' ) {
$ret = _findRequestParam($_vars, $_SESSION);
}

if (! $ret )
return $default;
else
return $ret;

}

/**
@access private
*/
function _findRequestParam($vars, $find_in , $curr_key = 0)
{
static $ret;

if( array_key_exists($vars[$curr_key], $find_in) ) {
if( count( $vars)-1 == $curr_key ) {
$ret = $find_in[$vars[$curr_key]];
}
elseif( $curr_key < count( $vars)-1 ) {
_findRequestParam( $vars, $find_in[$vars[$curr_key]], $curr_key+1 );
}
}

return $ret;

}

?>

Hope this will help someone!
conorj14-Jul-2007 08:34
Another note on unquoted array indices. Because it is first interpreted as a
constant, it must obey the naming convention of constants. i.e. a letter or
underscore followed by optional letter, digit and/or underscore characters.

Therefore while the following array declaration is legal:
$a = array('1st'=>'First','2nd'=>'Second');

Trying to access either array item as follows causes an error:

$first = "$a[1st]";
$second = "$a[2nd]";
moehbass at gmail dot com10-Jul-2007 05:41
< b>Mark Gukov</b> wrote below:

Regarding the fact that there's no need to quote arrays keys when enclosed in
double quotes: it only applies to single dimensional arrays.

The following works fine:

<?php
$r['a'] = 'apple';
echo "$r[a] is tasty.";
?>

...but in the case of multi-dimensional arrays:

<?php
$r['a']['b'] = 'banana';
echo "$r[a][b] is tasty.";
?>

would result in "Array[c] is tasty."
-----------------------------------------------------------------
However, the following runs fine;
$r['a']['b'] = 'banana';
echo "{$r[a][b]} is tasty.";

Just box it!
don dot hosek at gmail dot com23-May-2007 05:37
It's slightly faster to use array_splice to remove an element of an array:
array_splice($array, $index, 1)
than to do it using the suggested method of unset and reindex:
unset($array[$index]);
$array = array_values($array);

The difference, however, is very small. With 950 iterations I had times of
unset and reindex: 0.22837495803833
splice: 0.22392416000366
lesantoso at yahoo dot com20-Mar-2007 02:14
This Indonesian number speller function is twice
faster(*) than the one provided in class Terbilang by
anghuda(at)gmail(dot)com (25-May-2006 08:52):

http://www.lesantoso.com/terbilang.html

(*) 2.1 vs. 4.2 seconds in processing 10000 random numbers
Spudley16-Mar-2007 01:44
On array recursion...

Given the following code:

< ?
$myarray = array('test',123);
$myarray[] = &$myarray;
print_r($myarray);
?>

The print_r() will display *RECURSION* when it gets to the third element of the
array.

There doesn't appear to be any other way to scan an array for recursive
references, so if you need to check for them, you'll have to use print_r() with
its second parameter to capture the output and look for the word *RECURSION*.

It's not an elegant solution, but it's the only one I've found, so I hope it
helps someone.
kal at kalunite dot com i mean dot net16-Jan-2007 05:55
About the automatic conversion of bare strings...
My opinion is that it never should have been implemented. Isn't it easier to NOT
implement this "handy" feature in the first place? It is such a convenient way
for "smart" programmers to write unsafe, not-futureproof code. Please remove
this feature from future versions of PHP, please. (Hey, if you could change the
OOP mechanisms between PHP 4 and PHP 5, why can't you make this change, right?)
25-Oct-2006 09:18
This page should include details about how associative arrays are implemened
inside PHP; e.g. using hash-maps or b-trees.

This has important implictions on the permance characteristics of associative
arrays and how they should be used; e.g. b-tree are slow to insert but handle
collisions better than hashmaps. Hashmaps are faster if there are no collisions,
but are slower to retrieve when there are collisions. These factors have
implictions on how associative arrays should be used.
Mark Gukov27-Sep-2006 02:18
Regarding the fact that there's no need to quote arrays keys when enclosed in
double quotes: it only applies to single dimensional arrays.

The following works fine:

<?php
$r['a'] = 'apple';
echo "$r[a] is tasty.";
?>

...but in the case of multi-dimensional arrays:

<?php
$r['a']['b'] = 'banana';
echo "$r[a][b] is tasty.";
?>

would result in "Array[c] is tasty."
petruzanautico at yahoo dot com dot ar21-Sep-2006 08:30
Regarding the message of phoenixbytes:

The line foreach($bad as $baddies); will just yield in $baddies the last value
of the array $bad.
I think that wasn't your intention, in that case there are faster and better
ways than foreach.

I think what you wanted to do is:
<?php
foreach($bad as $baddies) // make a collection
{
if (preg_match("/$baddies/i", $mailto)) // find a match
{
$addrmail = "false";
}
else
{
$addrmail = "true";
}
} // foreach end
?>
php dot net at todandlorna dot com25-Jul-2006 04:28
in response to ch dot martin at gmail dot com

If you are using the following code:

<?php
$r = array('05' => "abc", '35' => "def");
foreach ($r as $key=>$value)
var_dump($key);
?>
and you need the array key '35' to be a string (for looping maybe), you can make
sure the key is a string by appending a 0 on the front.

'035' instead of '35'
ch dot martin at gmail dot com08-Jun-2006 11:40
Extremely irritating quirk regarding the variable types of array keys:

<?php
$r = array('05' => "abc", '35' => "def");
foreach ($r as $key=>$value)
var_dump($key);
?>

The first var_dump for '05' is:
string(2) "05"
as expected. But the second, '35', turns out as:
int(35)

Php apparently decided to make the 35 became an int, but not the 05 (presumably
because it leads with a zero). As far as I can see, there is absolutely no way
of making string(2) "35" an array key.
anghuda(at)gmail(dot)com25-May-2006 06:52
this is simpler tha function display_angka_bilangan by ktaufik(at)gmail(dot)com
(16-Feb-2005 12:40)

< ?

/*
*
* Class : Terbilang
* Spell quantity numbers in Indonesian or Malay Language
*
*
* author: huda m elmatsani
* 21 September 2004
* freeware
*
* example:
* $bilangan = new Terbilang;
* echo $bilangan -> eja(137);
* result: seratus tiga puluh tujuh
*
*
*/

Class Terbilang {

function terbilang() {
$this->dasar = array(1=>'satu','dua','tiga','empat','lima','enam',
'tujuh','delapan','sembilan');

$this->angka = array(1000000000,1000000,1000,100,10,1);
$this->satuan = array('milyar','juta','ribu','ratus','puluh','');
}
function eja($n) {

$i=0;
while($n!=0){

$count = (int)($n/$this->angka[$i]);

if($count>=10) $str .= $this->eja($count). " ".$this->satuan[$i]." ";
else if($count > 0 && $count < 10)
$str .= $this->dasar[$count] . " ".$this->satuan[$i]." ";

$n -= $this->angka[$i] * $count;
$i++;
}
$str = preg_replace("/satu puluh (w+)/i","1 belas",$str);
$str = preg_replace("/satu (ribu|ratus|puluh|belas)/i","se1",$str);

return $str;
}
}

?>
benjcarson at digitaljunkies dot ca09-May-2006 01:46
phoenixbytes: The regex you have posted for matching email addresses is
incorrect. Among other things, it does not allow '+' before the '@' (which is
perfectly valid and can be quite useful to separate extensions of a single
address). RFC 822 [1] defines the grammar for valid email addresses, and (the
extemely long) regex implementing can be found at [2]. Even the "Add Note" page
here at php.net says:

[quote]
And if you're posting an example of validating email addresses, please don't
bother. Your example is almost certainly wrong for some small subset of cases.
See this information from O'Reilly Mastering Regular Expressions book for the
gory details.
[/quote]

A note to others: please do your homework before writing another email-matching
regex.

[1] http://www.ietf.org/rfc/rfc0822.txt?number=822
[2] http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html.
phoenixbytes at o2 dot co dot uk16-Apr-2006 05:10
i use the array() function for deciding upon an email address's validity, i have
a 'wap stalker' of my site that loves to exploit every hole i leave, so i used
the following script to avoid being email bombed with my own file sender script,
the array() is used to filter out undesirable email providers and, of course,
any and all of my own addresses. before all that i used a REGEX to make sure
it's an actual email address before going any further.

$mailto = "mail.domain.org"; // the input to be tested

if (preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+.[A-Z]{2,6}$/i", $mailto)) // see
if it's really an email address
{
$bad = array('mytrashmail.com', 'mymail.ro', 'acasa.ro', 'gala.net',
'phoenixbytes'); // pick out the victims
foreach($bad as $baddies); // make a collection

if (preg_match("/$baddies/i", $mailto)) // find a match
{
$addrmail = "false";
}
else
{
$addrmail = "true";
}

}
else
{
$addrmail = "false";
}

$addrmail can then be used in an argument.
$baddies can be used to give a list, if necessary.

i hope this helps someone.
crozzer01-Apr-2006 12:54
Passing variables into the array constructor:
Just a NOOB pointer, I couldn't find other examples for this. If you want to
pass the value of an existing variable into the array() constructor, you can
quote it or not, both methods are valid.

< ?
$foo_value = 'foo string';
$bar_value = 'bar string';

$myArray = array(
'foo_key' => $foo_value, // not quoted
'bar_key' => "$bar_value"); // quoted

foreach ($myArray as $k => $v) {
echo "$myArray[$k] => $v.<br />n";
}
?>

Both of these will work as expected, but the unqoted $foo_value method above is
marginally faster because adding quotes adds an additional string de-reference.
sales at maboom dot ch13-Dec-2005 09:41
if you need to check a multidimensonal array for values it's handy to store it
like

$ar['key1'][0]
$ar['key2'][0]
$ar['key3'][0]

$ar['key1'][1]
$ar['key2'][1]
$ar['key3'][1]

and to loop the keys.

Fill the array (from a database-request):

while($rf=mysql_fetch_row($rs))

{
$nr=$rf[0];
$channel['nr'][$nr]=$rf[1];
$channel['chatter'][$nr]=$rf[2];
}

Call the values:

foreach(array_keys($channel['nr']) as $test)
{
print ' nr:'.$test.'<br>';
print 'value nr: '.$channel['nr'][$test].'<br>';
print ' chatter: '.$channel['chatter'][$test].'<br>';
}

This is useful, if you have to look later for an element
inside the array:

if(in_array($new_value,$channel['nr'])) print 'do something.';

Hope this helps someone.
ia [AT] zoznam [DOT] sk30-Sep-2005 02:55
Regarding the previous comment, beware of the fact that reference to the last
value of the array remains stored in $value after the foreach:

<?php
foreach ( $arr as $key => &$value )
{
$value = 1;
}

// without next line you can get bad results...
//unset( $value );

$value = 159;
?>

Now the last element of $arr has the value of '159'. If we remove the comment in
the unset() line, everything works as expected ($arr has all values of '1').

Bad results can also appear in nested foreach loops (the same reason as above).

So either unset $value after each foreach or better use the longer form:

<?php
foreach ( $arr as $key => $value )
{
$arr[ $key ] = 1;
}
?>
stochnagara at hotmail dot com27-Sep-2005 01:53
Regarding the previous comment, thw following code does the job:

<?php
foreach($arr as $key => &$value) {
$value = 1;
}
?>
jazepstein OverAt GeeMail dot com19-Sep-2005 06:14
Regarding the previous comment, the fact that this code has no effect is
perfectly expected:

<?php
foreach($arr as $value) {
$value = 1;
}
?>

The reason that this doesn't work, is because each time that PHP goes through
the loop, it _copies_ the value of the array element into $value. So if you
assign a new value to the data in $value, it has no effect on the actual array,
because you only changed the value of the copy that was put in $value.

As was discovered in the previous post, the only way to get around this problem
is to change the value in the original array. Hence, a typical foreach should
instead look like this:

<?php
foreach($arr as $key => $value) {
$arr[$key] = 1;
}
?>
caifara aaaat im dooaat be28-Aug-2005 02:28
[Editor's note: You can achieve what you're looking for by referencing $single,
rather than copying it by value in your foreach statement. See
http://php.net/foreach for more details.]

Don't know if this is known or not, but it did eat some of my time and maybe it
won't eat your time now...

I tried to add something to a multidimensional array, but that didn't work at
first, look at the code below to see what I mean:

<?php

$a1 = array( "a" => 0, "b" => 1 );
$a2 = array( "aa" => 00, "bb" => 11 );

$together = array( $a1, $a2 );

foreach( $together as $single ) {
$single[ "c" ] = 3 ;
}

print_r( $together );
/* nothing changed result is:
Array
(
[0] => Array
(
[a] => 0
[b] => 1
)
[1] => Array
(
[aa] => 0
[bb] => 11
)
) */

foreach( $together as $key => $value ) {
$together[$key]["c"] = 3 ;
}

print_r( $together );

/* now it works, this prints
Array
(
[0] => Array
(
[a] => 0
[b] => 1
[c] => 3
)
[1] => Array
(
[aa] => 0
[bb] => 11
[c] => 3
)
)
*/

?>
uzakufuklar at hotmail dot com03-Aug-2005 11:24
It is a kind of simple muti-dimensional array list.
I have made it just to give a simple idea.
<?php
echo "Here we'll see how to create a multi-dimensional array.n";
$a=array('fruits'=>array('a'=>'orange',
'b'=>'grape',c=>'apple'),
'numbers'=>array(1,2,3,4,5,6),
'holes'=>array('first',5=>'second',
'third')
);
foreach($a as $list=>$things){
foreach($things as $newlist=>$counter){
echo $counter;
}
}
?>
z22-Apr-2005 12:10
Here's a simple function to insert a value into some position in an array

<?php
function array_insert($array,$pos,$val)
{
$array2 = array_splice($array,$pos);
$array[] = $val;
$array = array_merge($array,$array2);

return $array;
}
?>

and now for example...
<?php
$a = array("John","Paul","Peter");
$a = array_insert($a,1,"Mike");
?>

Now $a will be "John","Mike","Paul","Peter"
jeff splat codedread splot com21-Apr-2005 09:16
Beware that if you're using strings as indices in the $_POST array, that periods
are transformed into underscores:

< html>
< body>
<?php
printf("POST: "); print_r($_POST); printf("<br/>");
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="Windows3.1" value="Sux">
<input type="submit" value="Click" />
< /form>
< /body>
< /html>

Once you click on the button, the page displays the following:

POST: Array ( [Windows3_1] => Sux )
roland dot swingler at transversal dot com05-Apr-2005 08:24
Something that tripped me up:

If you mix string and integer keys, be careful if you are doing a comparison on
the to find if a string key exists.

For example, this will not do what you expect it to do:

<?php
$exampleArray = array();
$exampleArray['foo'] = 'bar';
$exampleArray[] = 'Will create 0 index';

$keyWeAreLookingFor = "correctKey";

foreach ($exampleArray as $key => $value){
if ($key == $keyWeAreLookingFor){
print "Found Key";
}
}
?>

It will print "Found Key", because (I presume) when PHP makes the comparison
between the string "correctKey" and the index 0, it casts the string to an
integer, rather than casting 0 to the string "0" and then doing the comparison.

Using === fixes the problem:

<?php
foreach ($exampleArray as $key => $value){
if ($key === $keyWeAreLookingFor){
print "Found Key";
}
}
?>
lars-phpcomments at ukmix dot net28-Mar-2005 08:40
Used to creating arrays like this in Perl?

@array = ("All", "A".."Z");

Looks like we need the range() function in PHP:

<?php
$array = array_merge(array('All'), range('A', 'Z'));
?>

You don't need to array_merge if it's just one range:

<?php
$array = range('A', 'Z');
?>
mortoray at ecircle-ag dot com16-Feb-2005 12:59
On array copying a deep copy is done of elements except those elements which are
references, in which case the reference is maintained. This is a very important
thing to understand if you intend on mixing references and recursive arrays.

By Example:
$a = array( 1 );
$aref_a = array( &$a );
$copy_aref_a = $aref_a;
$acopy_a = array( $a );
$copy_acopy_a = $acopy_a;

$a[] = 5;
$acopy_a[0][] = 6;
print_r( $aref_a ); //Shows: ( (1,5) )
print_r( $copy_aref_a ); //Shows: ( (1,5) )
print_r( $acopy_a ); //Shows: ( (1, 6) )
print_r( $copy_acopy_a ); //Shows: ( (1) )
ktaufik(at)gmail(dot)com16-Feb-2005 12:40
For you who works for localized "say" number to letter ( ex , 7=> seven,
8=>eight) for Bahasa Indonesia.

Indonesia "say" or "Terbilang" is based on 3 digit number.
thousands, millions and trillions .... will be based on the 3 digit number.

In Indonesia you say 137 as "Seratus Tiga Puluh Tujuh"

<?php
//build random 3 digit number to be "said" in Bahasa Indonesia
$x=rand(0,9);
$y=rand(0,9);
$z=rand(0,9);

function display_angka_bilangan($n) {
$angka = array(
1 => 'satu',
2 => 'dua',
3 => 'tiga',
4 => 'empat',
5 => "lima",
6 => 'enam',
7 => 'tujuh',
8 => 'delapan',
9 => 'sembilan'
);
return $angka[$n];
}
// Terbilang X-------Say X
if ($x==1){$terbilangx="seratus ";}
elseif ($x==0){$terbilangx='';}
else {$terbilangx=''.display_angka_bilangan($x).' '.'ratus ';}
// Terbilang Y ------Say Y
if ($y==0){$terbilangy='';}
elseif ($y==1 && $z==1){$terbilangy="sebelas";$terbilangz='';}
elseif ($y==1 && $z==0){$terbilangy="sepuluh ";$terbilangz='';}
elseif ($y==1 && $z!==1 && $z!==0){$terbilangy=''.display_angka_bilangan($z).'
belas ';}
else {$terbilangy=''.display_angka_bilangan($y).' '.'puluh ';}
// Terbilang z ------Say z
if ($z==0){$terbilangz="";}
elseif ($z==0 && $y==1){$terbilangz="";}
elseif ($z==1 && $y==1){$terbilangz="";}
elseif($y==0) {$terbilangz="".display_angka_bilangan($z);}
elseif ($y==1 && $z!==1 && $z!==0) {$terbilangz="";}
else {$terbilangz="".display_angka_bilangan($z);};

$terbilang=$terbilangx.$terbilangy.$terbilangz;
echo $x.$y.$z." ";
echo $terbilang;
?>

Hope it is useful
ktaufik(at)gmail(dot)com
db05-Jan-2005 07:06
[Editor's Note: (Second example.) These are not "arrays in arrays". These are
single-dimensional arrays containing stdClass objects; all objects are
referenced by default in PHP5. You can see in the var_dump output that they
point to the same object.]

Attention with Arrays in Arrays!

If you copy (=) an array which contains arrays it will be REFERENCED not COPIED.

Example:

<?php
/* GOOD ONE */
echo "<b>Here copy (=) works correct:</b><br>";
/* Initialise Array 1 */
$x1 = array(array(10,20),array(30,40));
/* COPY Array */
$x2 = $x1;
/* Change some values in Array 2 */
$x2[0][0]=77;
$x2[1][1]=99;
echo "<b>Original:</b><pre>";
var_dump($x1);
echo "</pre><b>Changed Copy:</b><pre>";
var_dump($x2);

/* BAAAAAAAD ONE */
echo "</pre><hr><b>Here copy (=) FAILS:</b><br>";
/* Initialise Array 1 */
$a1[0]->bla[0]->id=10;
$a1[0]->bla[1]->id=20;
$a1[1]->bla[0]->id=30;
$a1[1]->bla[1]->id=40;
/* COPY Array */
$a2 = $a1;
/* Change some values in Array 2 (!) */
$a2[0]->bla[0]->id=77;
$a2[1]->bla[1]->id=99;
echo "<b>Original:</b><pre>";
var_dump($a1);
echo "</pre><b>Changed Copy:</b><pre>";
var_dump($a2);
echo "</pre>";

php?>

The output of $a1 and $a2 will be the same..
Joe Morrison <jdm at powerframe dot com>08-Nov-2004 01:26
Programmers new to PHP may find the following surprising:

<?php

$x[1] = 'foo';
$x[0] = 'bar';
echo "Original array:n";
var_dump($x);

array_pop($x);
echo "Array after popping last element:n";
var_dump($x);

?>

The surprise is that element 0 is deleted, not element 1. Apparently the notion
of "last element" has more to do with how the array is stored internally than
with which element has the highest numeric index. I recently translated a Perl
program to PHP and was bitten by this one.

My solution was to identify all the places in my code where I could prove that
the array elements were assigned sequentially. In those cases it is safe to use
array_pop, array_splice, etc. since the array indices correspond with the array
layout. For the other cases, my solution was to write replacements for the
built-in array functions such as this one:

<?php

function safe_pop(&$a)
{
if (!isset($a))
return;

if (!is_array($a))
return;

if (count($a) == 0)
return;

unset($a[max(array_keys($a))]);
}

?>
Cameron Brown18-Nov-2003 08:51
Negative and positive array indices have different behavior when it comes to
string<->int conversion. 1 and "1" are treated as identical indices, -1 and "-1"
are not. So:

$arr["1"] and $arr[1] refer to the same element.
$arr["-1"] and $arr[-1] refer to different elements.

The following code:

< ?
$arr[1] = "blue";
$arr["1"] = "red";
$arr[-1] = "blue";
$arr["-1"] = "red";

var_dump($arr);
?>

produces the output:

array(3) {
[1]=>
string(3) "red"
[-1]=>
string(4) "blue"
["-1"]=>
string(3) "red"
}

This code should create an array with either two or four elements. Which one
should be the "correct" behavior is an exercise left to the reader....
akamai at veloxmail dot com dot br16-Jul-2003 04:22
It is quite simple, but don't forget when you'll using foreach with forms
arrays.

If your field name is:
< input type="checkbox" name="foo['bar'][]" ...
It doesn't work.

This should work:
< input type="checkbox" name="foo[bar][]" ...
agape_logos at shaw dot ca11-Jul-2003 04:59
I was having trouble getting javascript arrays and php arrays to work together
with a Check All checkboxe. Here is a simple solution. Clicking the 'Check All'
checkbox will check all checkboxes on the form.

< script language="JavaScript">
function chkAll(frm, arr, mark) {
for (i = 0; i <= frm.elements.length; i++) {
try{
if(frm.elements[i].name == arr) {
frm.elements[i].checked = mark;
}
} catch(er) {}
}
}
< /script>

< form name='foo'>
< input type="checkbox" name="ca" value="1" onClick="chkAll(this.form,
'formVar[chkValue][]', this.checked)">
<?php
for($i = 0; $i < 5; $i++){
echo("<input type='checkbox' name='formVar[chkValue][]' value='$i'>");
}
?>
</form>

Dean M.
chroniton .at. gmx .dot. li26-Mar-2003 10:13
I didn't find this anywhere in the docs and i think it is worth a mention:

$a[] = &$a;
print_r($a);

// will output:

/*
Array
(
[0] => Array
*RECURSION*
)

*/

// this means that $a[0] is a reference to $a ( that is detected by print_r() ).
I guess this is what the manual calls 'recursive arrays'.
07-Mar-2003 03:28
"Using NULL as a key will evaluate to an empty string. Using an emptry string as
key will create (or overwrite) a key with an empty string and its value, it is
not the same as using empty brackets."

If you create an array like this:
$foo = array(null => 'bar');
And then want to access 'bar', you must use this syntax:
echo $foo['']; // notice the two single quotes

This will of course cause a fatal error:
echo $foo[];
wmoranATpotentialtechDOTcom29-Nov-2002 03:10
Dereferencing arrays takes some time, but is not terribly expensive.
I wrote two dummy loops to test performance:
for ($i =0; $i < count($a); $i++) {
$x = $a[$b[$i]];
$y = $a[$b[$i]];
$z = $a[$b[$i]];
}
for ($i =0; $i < count($a); $i++) {
$q = $b[$i];
$x = $a[$q];
$y = $a[$q];
$z = $a[$q];
}

The first loop is 6.5% slower than the second. Meaning that dereferencing arrays
is not terribly expensive, unless you do it a whole lot. I would expect that
each extra reference costs about 3% in speed. The lesson is that if you're going
to be using a specific value in an array for a number of operations, you can
gain a little speed by assigning it to a temp variable (or creating a reference
with $q = &$b[$i]) but it's not worth getting crazy over.
I tested this with iterations of 10,000 and 100,000 on php 4.2 and the results
were consistent.
mu at despammed dot com14-Oct-2002 11:50
Recursive arrays and multi-dimensional arrays are the same thing and completely
identical.

The following confirms this:

$fruits1["european"]["green"] = "Apple";
$fruits2 = array ( "european" => array ( "green" => "Apple"));
print ($fruits1 === $fruits2);

Result: 1 (= true)
hramrach_L at centrum. cz ;-)11-Jun-2002 05:40
Arrays can be merged using + as discussed in the notes for array_merge.
http://www.php.net/manual/en/function.array-merge.php
philip at boone dot at24-May-2002 06:06
For all of you having problems when using php arrays in an HTML form input field
name, and wanting to validate the form using javascript for example, it is much
easier to specify an id for the field as well, and use this id for validation.

Example:

< input type="text" id="lastname" name="fields[lastname]">

then in the javascript check:

if(formname.lastname.value == "") {
alert("please enter a lastname!");
}

This works very well. If you have any problems with it, let me know.

Mais conteúdo relacionado

Mais procurados

Array String - Web Programming
Array String - Web ProgrammingArray String - Web Programming
Array String - Web ProgrammingAmirul Azhar
 
PHP MATERIAL
PHP MATERIALPHP MATERIAL
PHP MATERIALzatax
 
Php Using Arrays
Php Using ArraysPhp Using Arrays
Php Using Arraysmussawir20
 
perl course-in-mumbai
 perl course-in-mumbai perl course-in-mumbai
perl course-in-mumbaivibrantuser
 
Php basics
Php basicsPhp basics
Php basicshamfu
 
Twig Brief, Tips&Tricks
Twig Brief, Tips&TricksTwig Brief, Tips&Tricks
Twig Brief, Tips&TricksAndrei Burian
 
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...anshkhurana01
 
Perl.predefined.variables
Perl.predefined.variablesPerl.predefined.variables
Perl.predefined.variablesKing Hom
 
Php Chapter 1 Training
Php Chapter 1 TrainingPhp Chapter 1 Training
Php Chapter 1 TrainingChris Chubb
 
Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)
Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)
Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)James Titcumb
 
Climbing the Abstract Syntax Tree (php[world] 2019)
Climbing the Abstract Syntax Tree (php[world] 2019)Climbing the Abstract Syntax Tree (php[world] 2019)
Climbing the Abstract Syntax Tree (php[world] 2019)James Titcumb
 
Climbing the Abstract Syntax Tree (phpDay 2017)
Climbing the Abstract Syntax Tree (phpDay 2017)Climbing the Abstract Syntax Tree (phpDay 2017)
Climbing the Abstract Syntax Tree (phpDay 2017)James Titcumb
 

Mais procurados (20)

Array String - Web Programming
Array String - Web ProgrammingArray String - Web Programming
Array String - Web Programming
 
PHP MATERIAL
PHP MATERIALPHP MATERIAL
PHP MATERIAL
 
SQL -PHP Tutorial
SQL -PHP TutorialSQL -PHP Tutorial
SQL -PHP Tutorial
 
Php array
Php arrayPhp array
Php array
 
Php Using Arrays
Php Using ArraysPhp Using Arrays
Php Using Arrays
 
perl course-in-mumbai
 perl course-in-mumbai perl course-in-mumbai
perl course-in-mumbai
 
Php basics
Php basicsPhp basics
Php basics
 
Twig Brief, Tips&Tricks
Twig Brief, Tips&TricksTwig Brief, Tips&Tricks
Twig Brief, Tips&Tricks
 
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
 
Variables in PHP
Variables in PHPVariables in PHP
Variables in PHP
 
Perl.predefined.variables
Perl.predefined.variablesPerl.predefined.variables
Perl.predefined.variables
 
Php & my sql
Php & my sqlPhp & my sql
Php & my sql
 
Arrays in PHP
Arrays in PHPArrays in PHP
Arrays in PHP
 
Php Chapter 1 Training
Php Chapter 1 TrainingPhp Chapter 1 Training
Php Chapter 1 Training
 
Php
PhpPhp
Php
 
Operators php
Operators phpOperators php
Operators php
 
Love Twig
Love TwigLove Twig
Love Twig
 
Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)
Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)
Climbing the Abstract Syntax Tree (Bulgaria PHP 2016)
 
Climbing the Abstract Syntax Tree (php[world] 2019)
Climbing the Abstract Syntax Tree (php[world] 2019)Climbing the Abstract Syntax Tree (php[world] 2019)
Climbing the Abstract Syntax Tree (php[world] 2019)
 
Climbing the Abstract Syntax Tree (phpDay 2017)
Climbing the Abstract Syntax Tree (phpDay 2017)Climbing the Abstract Syntax Tree (phpDay 2017)
Climbing the Abstract Syntax Tree (phpDay 2017)
 

Destaque

Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...
Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...
Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...Service Design Network
 
Adv 435 ch 9 special audiences
Adv 435 ch 9 special audiencesAdv 435 ch 9 special audiences
Adv 435 ch 9 special audiencesLen Kornblau
 
Luis fernando casas salinas actividad1 mapac
Luis fernando casas salinas actividad1 mapacLuis fernando casas salinas actividad1 mapac
Luis fernando casas salinas actividad1 mapacsalinas78714
 
Resume Mortgage Services
Resume Mortgage ServicesResume Mortgage Services
Resume Mortgage Servicesmiguel denis
 
Esal e sawab by allama saeed asad faisalabdi
Esal e sawab by allama saeed asad faisalabdiEsal e sawab by allama saeed asad faisalabdi
Esal e sawab by allama saeed asad faisalabdiMuhammad Tariq
 
IMovicon (TM) 11 Scada/HMI - Product catalogue - Deutsch
IMovicon (TM) 11 Scada/HMI - Product catalogue - DeutschIMovicon (TM) 11 Scada/HMI - Product catalogue - Deutsch
IMovicon (TM) 11 Scada/HMI - Product catalogue - DeutschPROGEA s.r.l.
 
IDC Iberia Predictions 2010
IDC Iberia Predictions 2010IDC Iberia Predictions 2010
IDC Iberia Predictions 2010Lluis Altes
 
Roadmap der Instandhaltung 4.0
Roadmap der Instandhaltung 4.0Roadmap der Instandhaltung 4.0
Roadmap der Instandhaltung 4.0Georg Guentner
 
BIM 101 : Initiation au BIM et ses technologies
BIM 101 : Initiation au BIM et ses technologiesBIM 101 : Initiation au BIM et ses technologies
BIM 101 : Initiation au BIM et ses technologiesGeomap GIS America
 
Geschäftsordnung des ögb
Geschäftsordnung des ögbGeschäftsordnung des ögb
Geschäftsordnung des ögbWerner Drizhal
 

Destaque (17)

Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...
Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...
Unleashing Creativity in an Exhausted Governmental Organization - Sophie Ande...
 
Informatica(1)
Informatica(1)Informatica(1)
Informatica(1)
 
Revista auditorios #05
Revista auditorios #05Revista auditorios #05
Revista auditorios #05
 
Programa de las Ferias y Fiestas 2014
Programa de las Ferias y Fiestas 2014Programa de las Ferias y Fiestas 2014
Programa de las Ferias y Fiestas 2014
 
Adv 435 ch 9 special audiences
Adv 435 ch 9 special audiencesAdv 435 ch 9 special audiences
Adv 435 ch 9 special audiences
 
Luis fernando casas salinas actividad1 mapac
Luis fernando casas salinas actividad1 mapacLuis fernando casas salinas actividad1 mapac
Luis fernando casas salinas actividad1 mapac
 
Resume Mortgage Services
Resume Mortgage ServicesResume Mortgage Services
Resume Mortgage Services
 
Open Sistemas Es
Open Sistemas EsOpen Sistemas Es
Open Sistemas Es
 
Tecno71
Tecno71Tecno71
Tecno71
 
Esal e sawab by allama saeed asad faisalabdi
Esal e sawab by allama saeed asad faisalabdiEsal e sawab by allama saeed asad faisalabdi
Esal e sawab by allama saeed asad faisalabdi
 
IMovicon (TM) 11 Scada/HMI - Product catalogue - Deutsch
IMovicon (TM) 11 Scada/HMI - Product catalogue - DeutschIMovicon (TM) 11 Scada/HMI - Product catalogue - Deutsch
IMovicon (TM) 11 Scada/HMI - Product catalogue - Deutsch
 
IDC Iberia Predictions 2010
IDC Iberia Predictions 2010IDC Iberia Predictions 2010
IDC Iberia Predictions 2010
 
Roadmap der Instandhaltung 4.0
Roadmap der Instandhaltung 4.0Roadmap der Instandhaltung 4.0
Roadmap der Instandhaltung 4.0
 
BIM 101 : Initiation au BIM et ses technologies
BIM 101 : Initiation au BIM et ses technologiesBIM 101 : Initiation au BIM et ses technologies
BIM 101 : Initiation au BIM et ses technologies
 
Curso Coaching Empresarial
Curso Coaching EmpresarialCurso Coaching Empresarial
Curso Coaching Empresarial
 
Holland vortrag
Holland vortragHolland vortrag
Holland vortrag
 
Geschäftsordnung des ögb
Geschäftsordnung des ögbGeschäftsordnung des ögb
Geschäftsordnung des ögb
 

Semelhante a Arrays

Lecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvv
Lecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvvLecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvv
Lecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvvZahouAmel1
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & ArraysHenry Osborne
 
PHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with thisPHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with thisIan Macali
 
20220112 sac v1
20220112 sac v120220112 sac v1
20220112 sac v1Sharon Liu
 
Php Chapter 2 3 Training
Php Chapter 2 3 TrainingPhp Chapter 2 3 Training
Php Chapter 2 3 TrainingChris Chubb
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning PerlDave Cross
 
Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...
Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...
Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...Dhivyaa C.R
 
RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0tutorialsruby
 
RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0tutorialsruby
 
Intermediate Perl
Intermediate PerlIntermediate Perl
Intermediate PerlDave Cross
 

Semelhante a Arrays (20)

Lecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvv
Lecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvvLecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvv
Lecture 5 array in PHP.pptxLecture 10 CSS part 2.pptxvvvvvvvvvvvvvv
 
Unit 2-Arrays.pptx
Unit 2-Arrays.pptxUnit 2-Arrays.pptx
Unit 2-Arrays.pptx
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & Arrays
 
Perl slid
Perl slidPerl slid
Perl slid
 
Chapter 2 wbp.pptx
Chapter 2 wbp.pptxChapter 2 wbp.pptx
Chapter 2 wbp.pptx
 
PHP array 1
PHP array 1PHP array 1
PHP array 1
 
PHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with thisPHP Powerpoint -- Teach PHP with this
PHP Powerpoint -- Teach PHP with this
 
20220112 sac v1
20220112 sac v120220112 sac v1
20220112 sac v1
 
Perl Introduction
Perl IntroductionPerl Introduction
Perl Introduction
 
Php Chapter 2 3 Training
Php Chapter 2 3 TrainingPhp Chapter 2 3 Training
Php Chapter 2 3 Training
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning Perl
 
perltut
perltutperltut
perltut
 
perltut
perltutperltut
perltut
 
Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...
Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...
Regular expressions, Session and Cookies by Dr.C.R.Dhivyaa Kongu Engineering ...
 
UNIT IV (4).pptx
UNIT IV (4).pptxUNIT IV (4).pptx
UNIT IV (4).pptx
 
Introduction to perl_lists
Introduction to perl_listsIntroduction to perl_lists
Introduction to perl_lists
 
RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0
 
RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0RubyMiniGuide-v1.0_0
RubyMiniGuide-v1.0_0
 
Intermediate Perl
Intermediate PerlIntermediate Perl
Intermediate Perl
 
Array
ArrayArray
Array
 

Último

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 

Último (20)

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Arrays

  • 1. Arrays Un array (matriz) en PHP es en realidad un mapa ordenado. Un mapa es un tipo de datos que asocia valores con claves. Este tipo es optimizado para varios usos diferentes; puede ser usado como una matriz real, una lista (vector), tabla asociativa (caso particular de implementación de un mapa), diccionario, colección, pila, cola y probablemente más. Ya que los valores de un array pueden ser otros array, también es posible crear árboles y array multidimensionales. Una explicación sobre tales estructuras de datos se encuentra por fuera del propósito de este manual, pero encontrará al menos un ejemplo de cada uno de ellos. Para más información, consulte la extensa literatura que existe sobre este amplio tema. Sintaxis Especificación con array() Un valor array puede ser creado por la construcción de lenguaje array(). Ésta toma un cierto número de parejas clave => valor separadas con coma. array( key => value , ... ) // key puede ser un integer o string // value puede ser cualquier valor <?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1 ?> Un key puede ser un integer o bien un string. Si una clave es la representación estándar de un integer, será interpretada como tal (es decir, "8" será interpretado como 8, mientras que "08" será interpretado como "08"). Los valores float en key serán truncados a valores tipo integer. Los tipos de arrays indexados y asociativos son el mismo tipo en PHP, el cual pueden contener índices tipo integer o string. Un valor puede ser de cualquier tipo en PHP. Nota: Intentar acceder a un array cuya key no está defina es lo mismo que acceder a cualquier otra variable no definida: Se producirá un error de nivel E_NOTICE, y el resultado será NULL. <?php $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42)); echo $arr["somearray"][6]; // 5 echo $arr["somearray"][13]; // 9
  • 2. echo $arr["somearray"]["a"]; // 42 ?> Si no especifica una key para un valor dado, entonces es usado el máximo de los índices integer, y la nueva key será ese valor máximo más 1. Si se especifica una key que ya tiene un valor asignado, ése valor será sobrescrito. <?php // Este array es lo mismo que... array(5 => 43, 32, 56, "b" => 12); // ...este array array(5 => 43, 6 => 32, 7 => 56, "b" => 12); ?> Advertencia Antes de PHP 4.3.0, agregar un elemento a un array cuya key máxima actual es un valor negativo creaba una nueva key como se ha descrito anteriormente. A partir de PHP 4.3.0, la nueva key será 0. Al usar TRUE como key, el valor será evaluado al integer 1. Al usar FALSE como key, el valor será evaluado al integer0. Al usar NULL como key, el valor será evaluado a un string vacío. El uso de un string vacío como key creará (o reemplazará) una key con un string vacío y su valor; no es lo mismo que usar corchetes vacíos. Arrays y objetos no pueden ser usados como keys. Al hacerlo se producirá una advertencia: Illegal offset type. Creación/modificación con sintaxis de corchetes cuadrados Es posible modificar un array existente al definir valores explícitamente en él. Esto es posible al asignar valores al array al mismo tiempo que se especifica la key entre corchetes. También es posible omitir la key, lo que resulta en una pareja de corchetes vacíos ([]). $arr[key] = value; $arr[] = value; // key puede ser un integer o un string // value puede ser cualquier valor Si $arr no existe aun, será creada, así que ésta es también una forma alternativa de crear un array. Para modificar un cierto valor, simplemente asigne un nuevo valor a un elemento usando su key. Para remover una pareja key/valor, use la función unset() sobre ella. <?php $arr = array(5 => 1, 12 => 2); $arr[] = 56; // Esto es igual que $arr[13] = 56; // en este punto del script
  • 3. $arr["x"] = 42; // Esto agrega un nuevo elemento a la // array con la key "x" unset($arr[5]); // Esto elimina el elemento del array unset($arr); // Esto elimina el array completamente ?> Nota: Como se mencionó anteriormente, si no se especifica una key, entonces se toma el máximo de los índices integer existentes, y la nueva key será ese valor máximo más 1. Si no existen índices integer aun, la clave será 0 (cero). Note que el entero máximo usado en la key para este caso no necesita existir actualmente en el array. Tan solo debe haber existido en el array en algún punto desde que el array haya sido re-indexado. El siguiente ejemplo ilustra este caso: <?php // Crea un array simple. $array = array(1, 2, 3, 4, 5); print_r($array); // Ahora eliminar cada ítem, pero dejar el array mismo intacto: foreach ($array as $i => $value) { unset($array[$i]); } print_r($array); // Agregar un ítem (note que la nueva key es 5, en lugar de 0). $array[] = 6; print_r($array); // Re-indexar: $array = array_values($array); $array[] = 7; print_r($array); ?> El resultado del ejemplo sería: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5
  • 4. ) Array ( ) Array ( [5] => 6 ) Array ( [0] => 6 [1] => 7 ) Funciones útiles Existe un buen número de funciones útiles para trabajar con array. Consulte la sección funciones de arrays. Nota: La función unset() le permite eliminar keys de un array. Tenga en cuenta que el array no es re-indexado. Si desea el comportamiento real de "eliminar y desplazar", el array puede ser re-indexado usando la función array_values(). <?php $a = array(1 => 'one', 2 => 'two', 3 => 'three'); unset($a[2]); /* producirá un array que hubiera sido definida como $a = array(1 => 'one', 3 => 'three'); y NO $a = array(1 => 'one', 2 =>'three'); */ $b = array_values($a); // Ahora $b es array(0 => 'one', 1 =>'three') ?> La estructura de control foreach existe específicamente para arrays. Ésta provee una manera fácil de recorrer un array. Recomendaciones sobre arrays y cosas a evitar ¿Por qué es incorrecto $foo[bar]?
  • 5. Siempre deben usarse comillas alrededor de un índice de array tipo cadena literal. Por ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es. ¿Pero por qué? Es común encontrar este tipo de sintaxis en scripts viejos: <?php $foo[bar] = 'enemy'; echo $foo[bar]; // etc ?> Esto está mal, pero funciona. La razón es que este código tiene una constante indefinida (bar) en lugar de un valor string ('bar' - note las comillas). Puede que en el futuro PHP defina constantes que, desafortunadamente para tal tipo de código, tengan el mismo nombre. Funciona porque PHP automáticamente convierte una cadena pura (un string sin comillas que no corresponda con símbolo conocido alguno) en un string que contiene la cadena pura. Por ejemplo, si no se ha definido una constante llamada bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última. Nota: Esto no quiere decir que siempre haya que usar comillas en la clave. No use comillas con claves que sean constantes o variables, ya que en tal caso PHP no podrá interpretar sus valores. <?php error_reporting(E_ALL); ini_set('display_errors', true); ini_set('html_errors', false); // Array simple: $array = array(1, 2); $count = count($array); for ($i = 0; $i < $count; $i++) { echo "nRevisando $i: n"; echo "Mal: " . $array['$i'] . "n"; echo "Bien: " . $array[$i] . "n"; echo "Mal: {$array['$i']}n"; echo "Bien: {$array[$i]}n"; } ?> El resultado del ejemplo sería: Revisando 0: Notice: Undefined index: $i in /path/to/script.html on line 9 Mal: Bien: 1 Notice: Undefined index: $i in /path/to/script.html on line 11 Mal: Bien: 1 Revisando 1: Notice: Undefined index: $i in /path/to/script.html on line 9 Mal: Bien: 2 Notice: Undefined index: $i in /path/to/script.html on line 11
  • 6. Mal: Bien: 2 Más ejemplos para demostrar este comportamiento: <?php // Mostrar todos los errores error_reporting(E_ALL); $arr = array('fruit' => 'apple', 'veggie' => 'carrot'); // Correcto print $arr['fruit']; // apple print $arr['veggie']; // carrot // Incorrecto. Esto funciona pero también genera un error de PHP de // nivel E_NOTICE ya que no hay definida una constante llamada fruit // // Notice: Use of undefined constant fruit - assumed 'fruit' in... print $arr[fruit]; // apple // Esto define una constante para demostrar lo que pasa. El valor 'veggie' // es asignado a una constante llamada fruit. define('fruit', 'veggie'); // Note la diferencia ahora print $arr['fruit']; // apple print $arr[fruit]; // carrot // Lo siguiente está bien ya que se encuentra al interior de una cadena. Las constantes no son procesadas al // interior de cadenas, así que no se produce un error E_NOTICE aquí print "Hello $arr[fruit]"; // Hello apple // Con una excepción, los corchetes que rodean las matrices al // interior de cadenas permiten el uso de constantes print "Hello {$arr[fruit]}"; // Hello carrot print "Hello {$arr['fruit']}"; // Hello apple // Esto no funciona, resulta en un error de intérprete como: // Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING' // Esto por supuesto se aplica también al uso de superglobales en cadenas print "Hello $arr['fruit']"; print "Hello $_GET['foo']"; // La concatenación es otra opción print "Hello " . $arr['fruit']; // Hello apple ?> Cuando se habilita error_reporting para mostrar errores de nivel E_NOTICE (como por ejemplo definiendo el valor E_ALL), este tipo de usos serán inmediatamente visibles. Por omisión, error_reporting se encuentra configurado para no mostrarlos.
  • 7. Tal y como se indica en la sección de sintaxis, lo que existe entre los corchetes cuadrados ('[' y ']') debe ser una expresión. Esto quiere decir que código como el siguiente funciona: <?php echo $arr[somefunc($bar)]; ?> Este es un ejemplo del uso de un valor devuelto por una función como índice del array. PHP también conoce las constantes: <?php $error_descriptions[E_ERROR] = "Un error fatal ha ocurrido"; $error_descriptions[E_WARNING] = "PHP produjo una advertencia"; $error_descriptions[E_NOTICE] = "Esta es una noticia informal"; ?> Note que E_ERROR es también un identificador válido, asi como bar en el primer ejemplo. Pero el último ejemplo es equivalente a escribir: <?php $error_descriptions[1] = "Un error fatal ha ocurrido"; $error_descriptions[2] = "PHP produjo una advertencia"; $error_descriptions[8] = "Esta es una noticia informal"; ?> ya que E_ERROR es igual a 1, etc. ¿Entonces porqué está mal? En algún momento en el futuro, puede que el equipo de PHP quiera usar otra constante o palabra clave, o una constante proveniente de otro código puede interferir. Por ejemplo, en este momento no puede usar las palabras empty y default de esta forma, ya que son palabras clave reservadas. Nota: Reiterando, al interior de un valor string entre comillas dobles, es válido no rodear los índices de matriz con comillas, así que "$foo[bar]" es válido. Consulte los ejemplos anteriores para más detalles sobre el porqué, así como la sección sobre procesamiento de variables en cadenas. Conversión a array Para cualquiera de los tipos: integer, float, string, boolean y resource, convertir un valor a un array resulta en un array con un solo elemento, con índice 0, y el valor del escalar que fue convertido. En otras palabras, (array)$scalarValue es exactamente lo mismo que array($scalarValue). Si convierte un object a un array, el resultado es un array cuyos elementos son las propiedados del object. Las keys son los nombres de las variables miembro, con algunas excepciones notables: las variables privadas tienen el nombre de la clase al comienzo del nombre de la variable; las variables protegidas tienen un caracter '*' al
  • 8. comienzo del nombre de la variable. Estos valores adicionados al inicio tienen bytes nulos a los lados. Esto puede resultar en algunos comportamientos inesperados: <?php class A { private $A; // Este campo se convertirá en '0A0A' } class B extends A { private $A; // Este campo se convertirá en '0B0A' public $AA; // Este campo se convertirá en 'AA' } var_dump((array) new B()); ?> En el ejemplo anterior parecerá que se tienen dos claves llamadas 'AA', aunque en realidad una de ellas se llama '0A0A'. Si convierte un valor NULL a array, obtiene un array vacío. Comparación Es posible comparar arrays con la función array_diff() y mediante operadores de arrays. Ejemplos El tipo matriz en PHP es bastante versátil. Aquí hay algunos ejempos: <?php // Esto: $a = array( 'color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 'name' => 'apple', 4 // la clave será 0 ); $b = array('a', 'b', 'c'); // . . .es completamente equivalente a $a = array(); $a['color'] = 'red'; $a['taste'] = 'sweet'; $a['shape'] = 'round'; $a['name'] = 'apple'; $a[] = 4; // la clave será 0 $b = array(); $b[] = 'a'; $b[] = 'b';
  • 9. $b[] = 'c'; // Después de que se ejecute el código, $a será el array // array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', // 'name' => 'apple', 0 => 4), y $b será el array // array(0 => 'a', 1 => 'b', 2 => 'c'), o simplemente array('a', 'b', 'c'). ?> Ejemplo #1 Uso de array() <?php // Array como mapa de propiedades $map = array( 'version' => 4, 'OS' => 'Linux', 'lang' => 'english', 'short_tags' => true ); // Keys estrictamente numéricas $array = array( 7, 8, 0, 156, -10 ); // esto es lo mismo que array(0 => 7, 1 => 8, ...) $switching = array( 10, // key = 0 5 => 6, 3 => 7, 'a' => 4, 11, // key = 6 (el índice entero máximo era 5) '8' => 2, // key = 8 (integer!) '02' => 77, // key = '02' 0 => 12 // el valor 10 será reemplazado por 12 ); // array vacío $empty = array(); ?> Ejemplo #2 Colección <?php $colors = array('rojo', 'azul', 'verde', 'amarillo'); foreach ($colors as $color) { echo "¿Le gusta el $color?n"; } ?> El resultado del ejemplo sería: ¿Le gusta el rojo? ¿Le gusta el azul? ¿Le gusta el verde? ¿Le gusta el amarillo?
  • 10. Modificar los valores del array directamente es posible a partir de PHP 5, pasándolos por referencia. Las versiones anteriores necesitan una solución alternativa: Ejemplo #3 Cambiando elemento en el bucle <?php // PHP 5 foreach ($colors as &$color) { $color = strtoupper($color); } unset($color); /* se asegura de que escrituras subsiguientes a $color no modifiquen el último elemento del arrays */ // Alternativa para versiones anteriores foreach ($colors as $key => $color) { $colors[$key] = strtoupper($color); } print_r($colors); ?> El resultado del ejemplo sería: Array ( [0] => ROJO [1] => AZUL [2] => VERDE [3] => AMARILLO ) Este ejemplo crea un array con base uno. Ejemplo #4 Índice con base 1 <?php $firstquarter = array(1 => 'Enero', 'Febrero', 'Marzo'); print_r($firstquarter); ?> El resultado del ejemplo sería: Array ( [1] => 'Enero' [2] => 'Febrero' [3] => 'Marzo' ) Ejemplo #5 Llenado de un array <?php // llenar un array con todos los ítems de un directorio $handle = opendir('.'); while (false !== ($file = readdir($handle))) { $files[] = $file; }
  • 11. closedir($handle); ?> Los Arrays son ordenados. El orden puede ser modificado usando varias funciones de ordenado. Vea la sección sobre funciones de arrays para más información. La función count() puede ser usada para contar el número de elementos en un array. Ejemplo #6 Ordenado de un array <?php sort($files); print_r($files); ?> Dado que el valor de un array puede ser cualquier cosa, también puede ser otro array. De esta forma es posible crear arrays recursivas y multi-dimensionales. Ejemplo #7 Arrays recursivos y multi-dimensionales <?php $fruits = array ( "fruits" => array ( "a" => "orange", "b" => "banana", "c" => "apple" ), "numbers" => array ( 1, 2, 3, 4, 5, 6 ), "holes" => array ( "first", 5 => "second", "third" ) ); // Algunos ejemplos que hacen referencia a los valores del array anterior echo $fruits["holes"][5]; // prints "second" echo $fruits["fruits"]["a"]; // prints "orange" unset($fruits["holes"][0]); // remove "first" // Crear una nueva array multi-dimensional $juices["apple"]["green"] = "good"; ?> La asignación de arrays siempre involucra la copia de valores. Use el operador de referencia para copiar un array por referencia. <?php $arr1 = array(2, 3); $arr2 = $arr1; $arr2[] = 4; // $arr2 ha cambiado, // $arr1 sigue siendo array(2, 3)
  • 12. $arr3 = &$arr1; $arr3[] = 4; // ahora $arr1 y $arr3 son iguales ?> Objetos Cadenas [edit] Last updated: Fri, 27 Jan 2012 User Contributed NotesArrays Anonymous27-Oct-2011 05:00 This is a simple solution for taking previous and next items, even if we are at the ends of the array. <?php $current_key; // the key of the item we want to search from if (isset($array[$current_key+1])) { $array_next = $array[$current_key+1]; // get the next item if there is } else { $array_next = $array[0]; // if not take the first (this means this is the end of the array) } if (isset($array[$current_key-1])) { $array_prev = $array[$current_key-1]; // get the previous item if there is } else { $array_prev = $array[count($array)-1]; // if not take the last item (this means this is the beginning of the array) } ?> prince at 3ddatalabs dot com26-Oct-2011 06:02 Hi, you also can try goAssocArrayNumeric() on two-dimensional or three- dimensional arrays. <?php //Now it's a two-dimensional array $myTwoDimArray = array('a'=>array('a0'=>'apple','a1'=>'avocado','a2'=>'apricot'), 'b'=>array('b0'=>'banana','b1'=>'blackberry','b2'=>'breadfruit'), 'c'=>array('c0'=>'carrot','c1'=>'coco','c2'=>'coffee')); echo $myTwoDimArray[0][0]; //won't work! But,
  • 13. //using the same function used to access associative arrays numerically, we may access 2-dimensional arrays numerically. function goAssocArrayNumeric($arrAssoc, $key=-1) { $i = -1; foreach ($arrAssoc as $k => $v) { $i++; if($i == $key) { return $v; } } return FALSE; } //usage: applying it twice. echo goAssocArrayNumeric(goAssocArrayNumeric($myTwoDimArray,0),0);//apple echo goAssocArrayNumeric(goAssocArrayNumeric($myTwoDimArray,2),1);//coco echo goAssocArrayNumeric(goAssocArrayNumeric($myTwoDimArray,2),2);//coffee ?> Thanks! Prince. prince at 3ddatalabs dot com26-Oct-2011 09:35 Hi, here's a way to access an associative array via it's numeric index. <?php //sample associative array: $myAssocArray = array('a'=>'apple', 'b'=>'banana', 'c'=>'carrot', 'd'=>'dragon fruit'); echo $assocArray[0]; //Above won't work! Because you can't access an associative array numerically. But, function goAssocArrayNumeric($arrAssoc, $key=-1) { $i = -1; foreach ($arrAssoc as $k => $v) { $i++; if ($i == $key) { return $v; } } return FALSE; } //usage: echo goAssocArrayNumeric($myAssocArray,0);//apple echo goAssocArrayNumeric($myAssocArray,3);//dragon fruit ?> Hope it helps! Thanks.
  • 14. Zane MegaLab.it22-Aug-2011 02:10 Beware: you can't access an associative array via it's numeric index: <?php $a = array( 'foo' => 'bar', 'sasfas' => 'addasda', 'safafsa' => 'hfdhfdf' ); echo $a[0]; // Undefined index, not 'bar' ?> mlvljr20-May-2011 06:37 please note that when arrays are copied, the "reference status" of their members is preserved (http://www.php.net/manual/en/language.references.whatdo.php). abimaelrc10-May-2011 05:15 This is another way to get value from a multidimensional array, but for versions of php >= 5.3.x <?php function array_value_recursive($key, array $arr){ $val = null; array_walk_recursive($arr, function($v, $k) use($key, &$val){ $val = $k == $key ? $v : (!is_null($val) ? $val : false); }); return $val; } $arr = array( 'foo' => 'foo', 'bar' => array( 'baz' => 'baz', 'candy' => 'candy', 'vegetable' => array( 'carrot' => 'carrot', ) ), 'fruits' => 'fruits', ); var_dump(array_value_recursive('carrot', $arr)); // string(6) "carrot" var_dump(array_value_recursive('apple', $arr)); // bool(false) var_dump(array_value_recursive('baz', $arr)); // string(3) "baz" var_dump(array_value_recursive('candy', $arr)); // string(5) "candy" var_dump(array_value_recursive('pear', $arr)); // bool(false) ?> chris AT cmbuckley DOT co DOT uk30-Apr-2011 04:45 Possibly unexpected behaviour: <?php $array = array(); var_dump($array['key']); // E_NOTICE (undefined key) $null = null;
  • 15. var_dump($null['key']); // no E_NOTICE ?> Ganpat Thakur07-Apr-2011 10:33 I was in need to get value of key which resides at any level in an multidimensional array. Unfortunately there is no such array function. So I write my own as below... <?php function array_get_key_val($key, $heystack) { if (is_array($heystack)) { foreach ($heystack as $k => $v) { if ($k == $key) { return $v; } elseif (is_array($v)) { return array_get_key_val($key, $v); } } } return FALSE; } ?> Hope this will help to few. anhsang9x at gmail dot com25-Mar-2011 06:09 I'm want to save values in array and display its, can to simple way: <?php $arr1 = array();//begin array $index = 0;//array's index $value_return = array();//Values me need for($i = 0; $i<10; $i++) { $arr1[$i] = rand(10, 100);//use to be function random for get values from 10 to 100. if($arr1[$i]%2 == 0)//Get values me need. { $value_return[$index] = $arr1[$i];//save values in this array $index += 1;//get space save for index. } } //display result. foreach($value_return as $value_display) echo "</br>".$value_display."</br>"; print_r($arr1); ?> lemurjan at gmail dot com10-Mar-2011 04:54 Sometimes you may need an array of constants including concatenated strings.
  • 16. That works fine in this case: <?php define("GLUE", "&"); function array_to_string($a) { $r = ""; foreach ($a as $key => $value) { $r .= "$key => $value<br>"; }; return $r; } // DECLARING ARRAY (1) $array = array("one", "two", "one".GLUE."two"); echo array_to_string($array); ?> This seems rather strange behavior in a CLASS nevertheless: <?php class wrong_class { // DECLARING ARRAY (2) private $array = array("one", "two", "one".GLUE."two"); function __toString() { return array_to_string($this->array); } } $wc = new wrong_class(); echo $wc; /* Parse error: parse error, expecting `')'' in ... code on line 21 */ ?> Anyway, if you force this declaring method inside a CLASS, you could change the object map directly: <?php class proper_class { function __construct() { // DECLARING ARRAY (3) $this->array = array("one", "two", "one".GLUE."two"); } function __toString() { return array_to_string($this->array); } } $pc = new proper_class(); echo $pc; ?> falkon303 at gmail dot com30-Jan-2011 01:08 Multidimensional arrays work great for checking search options if they exist in a $_GET string. The following saved me a lot of time. <?php
  • 17. $advanced_option['color'] = array("red", "blue", "green"); $advanced_option['state'] = array("new", "broken"); $advanced_option['state'] = array("on","off"); foreach($advanced_option as $y => $advanced_option[$y]) { // HERE WARE ARE GOING INTO EACH ARRAY'S VALUES/ITEMS $sub_array = $advanced_option[$y]; foreach($sub_array as $z => $sub_array[$z]) { // IF THE SEARCH OPTI0N EXISTS IN THE GET STRING, SET AN ARRAY NAMED AFTER THAT VALUE TO BE CHECKED (FOR CHECKBOXES & RADIOBUTTONS) if ($_GET[$y] == $advanced_option[$y][$z]) { $checked[$advanced_option[$y][$z]] = "checked"; } } } ?> Anonymous23-Nov-2010 02:27 In case you had to get an element from a function-returned array without having to save the array to a variable, here's a workaround I've come up with. <?php $stuff = 'something random here'; // To get the first element in the array, use reset echo reset(explode(' ', $stuff)); // Returns "something" // To get the last element, use end echo end(explode(' ', $stuff)); // Returns "here" // For an in-between element, you can use array_search on the flipped array $i = 1; //key for the element echo array_search($i, array_flip(explode(' ', $stuff))); // Returns "random" ?> Flappi28220-Aug-2010 10:03 Heres a simple function I wrote to remove a value from an array, without leaving a hole: <?php function removeFromArray(&$array, $key){ foreach($array as $j=>$i){ if($i == $key){ $array = array_values(unset($array[$j])); return true; break; } } ?>
  • 18. Returns true on success, or false on failure. The array will be automatically updated Walter Tross12-Aug-2010 11:04 It is true that "array assignment always involves value copying", but the copy is a "lazy copy". This means that the data of the two variables occupy the same memory as long as no array element changes. E.g., if you have to pass an array to a function that only needs to read it, there is no advantage at all in passing it by reference. ivegner at yandex dot ru22-Jul-2010 04:20 Like in Perl, you can use curly braces ({}) instead of square brackets ([]) to access array members: <?php $a = array (); $a[7] = 'seven'; $a{'hello'} = 'world'; print $a{7} . ' ' . $a['hello']; ?> Prints 'seven world'. william at cycronsystems dot com09-Jun-2010 04:28 I couldn't find a way to Trim an array in PHP so i wrote this little function that seemed to do the trick. It will trim the array down to a specified size <?php //Utility Function to Trim Array function trim_array(array $array,$int){ $newArray = array(); for($i=0; $i<$int; $i++){ array_push($newArray,$array[$i]); } return (array)$newArray; } ?> Example: var_dump($treatList); array(3) { ["id"]=> string(3) "476" ["categoryID"]=> string(2) "49" ["title"]=> string(55) "80% off Sidewalk Crawling Classes from Urban Adventures" $treatList = trim_array($listist,2); Will result in: var_dump($treatList); array(2) { ["id"]=> string(3) "476"
  • 19. ["categoryID"]=> string(2) "49" zachera03-Jun-2010 12:39 function array_closest_key($needle,$haystack){ foreach($haystack as $key => $value){ if($needle <= $value){ return $key; } } } Get the closest key to the specified $needle out of $haystack. dtomasiewicz at gmail dot com12-May-2010 10:42 <?php /** * Functions for examining and manipulating matrices (n-dimensional arrays) of data * with string dot-separated paths. For example, you might do this with multidimensional * array: * $var = $array['someKey']['cats']['dogs']['potato']; * * Accomplishing this can be a nightmare if you don't know the depth of the path or the array * is of a variable dimension. * * You can accomplish the same by using $array as a Matrix: * $array = new Matrix($array); * $var = $array->get('someKey.cats.dogs.potato); * * @author Daniel Tomasiewicz <www.fourstaples.com> */ class Matrix { private $data; public function __construct(array $data = array()) { $this->data = $data; } /** * Gets the value at the specified path. */ public function get($path = null) { if($path === null) { return $this->data; } $segs = explode('.', $path); $target =& $this->data; for($i = 0; $i < count($segs)-1; $i++) { if(isset($target[$segs[$i]]) && is_array($target[$segs[$i]])) { $target =& $target[$segs[$i]]; } else { return null;
  • 20. } } if(isset($target[$segs[count($segs)-1]])) { return $target[$segs[count($segs)-1]]; } else { return null; } } /** * Sets a value to a specified path. If the provided value is * null, the existing value at the path will be unset. */ public function set($path, $value = null) { if(is_array($path)) { foreach($path as $p => $v) { $this->set($p, $v); } } else { $segs = explode('.', $path); $target =& $this->data; for($i = 0; $i < count($segs)-1; $i++) { if(!isset($target[$segs[$i]])) { $target[$segs[$i]] = array(); } $target =& $target[$segs[$i]]; } if($segs[count($segs)-1] == '*') { foreach($target as $key => $value) { $target[$key]; } } elseif($value === null && isset($target[$segs[count($segs)-1]])) { unset($target[$segs[count($segs)-1]]); } else { $target[$segs[count($segs)-1]] = $value; } } } /** * Returns a flattened version of the data (one-dimensional array * with dot-separated paths as its keys). */ public function flatten($path = null) { $data = $this->get($path); if($path === null) { $path = ''; } else { $path .= '.'; }
  • 21. $flat = array(); foreach($data as $key => $value) { if(is_array($value)) { $flat += $this->flatten($path.$key); } else { $flat[$path.$key] = $value; } } return $flat; } /** * Expands a flattened array to an n-dimensional matrix. */ public static function expand($flat) { $matrix = new Matrix(); foreach($flat as $key => $value) { $matrix->set($key, $value); } return $matrix; } } ?> john at nowhere dot com18-Dec-2009 09:33 If you ever wondered if you can do something like: <?php $a = function_that_returns_an_array()['some_index']['some_other_index'] ; ?> The answer is no, you can't. But you can use the following function. I named it i() because it's a short name and stands for "to index". <?php /** * Usage: i( $array, $index [, $index2, $index3 ...] ) * * This is functionally equivalent to $array[$index1][$index2][$index3]... * * It can replace the more prolix * * $tmp = some_function_that_returns_an_array() ; * $value = $tmp['some_index']['some_other_index'] ; * * by doing the job with a single line of code as in * * $value = i( some_function_that_returns_an_array(), 'some_index', 'some_other_index' ) ; *
  • 22. * Note that since this function is slower than direct indexing, it should only be used in cases like the one * described above, for improving legibility. * * @param $array * @param $index * @param [optional] $index2, index3, ... * @throws Exception when the indexes do not exist */ function i(){ $args = func_get_args(); $array = $args[0];//gets the fist parameter, $array $indexes = $args; unset($indexes[0]);//because indexes[0] is actually not an index, but the first parameter, $array foreach( $indexes as $index ){ if( (! is_array($array)) || (! array_key_exists( $index, $array )) ){ throw new Exception("Array index out of bounds. Parameters:".print_r($args,true)); } $array = $array[$index]; } return $array; } ?> aaron at tekserve dot com24-Oct-2009 06:16 Here's a function to recursively convert objects to arrays and remove the special characters from private and protected variables. I use it with XML_Serializer to convert objects to XML. <?php function object_to_array($mixed) { if(is_object($mixed)) $mixed = (array) $mixed; if(is_array($mixed)) { $new = array(); foreach($mixed as $key => $val) { $key = preg_replace("/^0(.*)0/","",$key); $new[$key] = object_to_array($val); } } else $new = $mixed; return $new; } ?> unix at bujanoci dot net20-Oct-2009 10:55 Just in case someone finds it usefull. If you want to capitalize the first letter of each word in the array you could: <?php $myarray = array("one","two","three","four","etc.."); $map = array_map('ucfirst', $myarray); $j = join(' , ', $map); echo $j;
  • 23. ?> This will return: One , Two , Three , Four , Etc.. Probably it's not worth of posting it, but just thought beginners might find it usefull. Anonymous02-Oct-2009 04:33 This is a modification of a function like this which works with two dimensional arrays. Pass a 2d array to this function and my function will return an array of the arrays with the specified key-value pair (specified by $key and $value). <?php function seekKey($array, $key, $value) { $ret = array(); for ($i=0;$i<count($array);$i++) { if ($array[$i][$key]==$value) $ret[] = $array[$i]; } return $ret; } ?> Martin28-Sep-2009 11:04 You can actually create arrays in arrays; just consider the following code: <?php function LoadData($file) { $lines = file($file) or die('Could not open file'); foreach($lines as $line) { $i[] = array($line); print_r($i[1]) } LoadData('file.csv'); ?> A (.csv-)file is loaded into the function LoadData and stored in the array $lines. Then foreach puts the values from the $lines-array into $line and $i is defined as an array of the array $line. Please note that this type of code could take up much of CPU-usage; it generates a multi-dimensional array. When $i is printed (in the example, value 1 of the array) it would display: Array ( [0] => Array ( [0] => 7;75;X;0;0;1;0;3;Gr;Br;Do;0;0;0;0;0;0;0;0; [1] => ;200;K;0;0;0;0;0;Gr;0;0;0;0;ZL;0;0;0;0;0; [2] => ;260;Z;;;;;;Gr;;;;;VL;;;;;; [3] => ;270;K;;;;1;;Gr;Br;Li;;;;;;;;; [4] => ;500;V;;;;;;Br;;;;;;;;;;; [5] => 6;60;X;;;;;;;;;;;;;;;;; [6] => ;80;K;;;;;;Gr;;;;;ZL;;;;;; [7] => ;210;Z;;;;;;Gr;;;;;;;;;;; )
  • 24. webmaster at oehoeboeroe dot nl04-May-2009 07:47 A simple function to check if you can use your variable as an array offset validly and without getting it typecasted. <?php function is_safe_offset($offset) { return array_pop(@array_flip(array($offset => 0))) === $offset; } $a = 8; var_dump(is_safe_offset($a)); // true $b = '8'; var_dump(is_safe_offset($b)); // false $c = '08'; var_dump(is_safe_offset($c)); // true $d = 'foo'; var_dump(is_safe_offset($d)); // true $e = 3.8; var_dump(is_safe_offset($e)); // false $f = false; var_dump(is_safe_offset($f)); // false $g = null; var_dump(is_safe_offset($g)); // false $h = array(); var_dump(is_safe_offset($h)); // false $i = new StdClass; var_dump(is_safe_offset($i)); // false ?> genix at arctoz dot de07-Mar-2009 04:41 Hello, to check if an element was set is actually pretty simple: <?php $array = ('first' => 1, 'sec' => 2 ); $out = (isset($array['third'])) ? $array['third'] : 'third not set...'; echo $out; ?> greets, genix Dawid Krysiak17-Dec-2008 03:09
  • 25. Trying to get array element that was not set, throws ERROR_NOTICE and returns NULL. Example: <?php /* php v.4.4.7 */ $array = array( 'apple' => 'green', 'orange' => 'orange', ); $pear_color = $array['pear']; // Notice: Undefined index: pear in /path/to/file.php on line 123 var_dump($pear_color); // NULL ?> Haven't found that mentioned on this page. hek at theeks dot net24-Oct-2008 08:58 Note that NULL is not exactly a scalar value, so the following two lines of code do NOT produce identical arrays. <?php $x = (array) null; // $x ends up an empty array (zero elements) $y = array(null); // $y ends up an array containing one element (a null) ?> pinkgothic at gmail dot com13-Sep-2008 08:49 Re: fmouse, the phenomenom you're describing pertains to superglobals, not arrays, and it only applies in a very specific scope. Check out http://de.php.net/manual/en/language.variables.variable.php : "Please note that variable variables cannot be used with PHP's Superglobal arrays within functions or class methods. The variable $this is also a special variable that cannot be referenced dynamically." frywater04-Jun-2008 04:43 > fmouse Variable variables can be used with arrays as discussed in the variable variable section. Also, from your code, $somevar can be an array and still work fine. $fum = "somevar"; $$fum = array(); // $somevar is now an array $foo = $$fum; print_r( $foo); // we get an empty array printed print_r() doesn't just print arrays, it prints any variable type. If you pass it a variable, that hasn't been defined yet, it won't know how to print it. You would get this same results by passing any undefined variable such as: print_r( $bar ); // PHP Notice: undefined variable ...$bar fmouse at fmp dot com29-Apr-2008 01:14 Using variables as array names no longer works in PHP5. $fum = "somevar"; $foo = $$fum; # Still works if $somevar isn't an array. $foo contains the value of $somevar
  • 26. but .... $fum = "_POST"; print_r($$fum); print_r(${$fum}); Neither form of indirection works in this context. $$fum comes back empty. If you have PHP4 code that used this kind of indirection you can work around the change in PHP5 using an eval(). $fum = "_POST"; $foo = eval("return $$fum;"); print_r($foo); This works! rama dot devi at gmail dot com18-Mar-2008 01:52 Sorting double dimensional arrays by a specified key bothe for Strings and for integers: Ex: $personDetails = array( array("firstName" => "Nancy", "lastName" => "Grace", "age" => 22), array("firstName" => "Andy", "lastName" => "Peter", "age" => 28), array("firstName" => "Jim", "lastName" => "Gary", "age" => 25), array("firstName" => "Lary", "lastName" => "James", "age" => 28), array("firstName" => "Peter", "lastName" => "David", "age" => 17), array("firstName" => "Raj", "lastName" => "King", "age" => 9), array("firstName" => "John", "lastName" => "Baxter","age" => 35) ); //To sort the array by firstName:- function sortFirstName($p1, $p2) { return strnatcmp($p1['firstName'], $p2['firstName']); } usort($personDetails, 'sortFirstName'); //To sort by an integer Field function sortByInteger(&$personDetails, $field) { $sort = "return strnatcmp($p1['$field'], $p2['$field']);"; usort($personDetails, create_function('$p1,$p2', $sort)); return $personDetails; } $personDetails = sortByInteger($personDetails, 'age'); //To sort the array in Descending order by a key, It can be done by adding "-" sign before strnatcmp() function. I hope this helps ken underscore yap atsign email dot com09-Jan-2008 08:00 "If you convert a NULL value to an array, you get an empty array." This turns out to be a useful property. Say you have a search function that returns an array of values on success or NULL if nothing found. $values = search(...);
  • 27. Now you want to merge the array with another array. What do we do if $values is NULL? No problem: $combined = array_merge((array)$values, $other); Voila. pepesantillan at gmail dot com18-Dec-2007 04:25 z on 22-Apr-2005 12:10 wrote: ----------------------------------------------- Here's a simple function to insert a value into some position in an array <?php function array_insert($array,$pos,$val) { $array2 = array_splice($array,$pos); $array[] = $val; $array = array_merge($array,$array2); return $array; } ?> and now for example... <?php $a = array("John","Paul","Peter"); $a = array_insert($a,1,"Mike"); ?> Now $a will be "John","Mike","Paul","Peter" ----------------------------------------------- Im learning to use PHP and reading about array_splice found that <?php function array_insert($array,$pos,$val) { $array2 = array_splice($array,$pos); $array[] = $val; $array = array_merge($array,$array2); return $array; } $a = array("John","Paul","Peter"); $a = array_insert($a,1,"Mike"); print_r($a); ?> would output the same as <?php $b = array("John","Paul","Peter"); array_splice($b,1,0,array("Mike"));
  • 28. print_r($b); ?> SID TRIVEDI10-Oct-2007 02:14 <?php //Simple Login Script using associative array. //You may modify the codes and use $_POST['FORM_FIELD_DATA'] for your web-page. //You may spice-up the codes with more form field validation & security features. //$user_name=$_POST['user_name']; //$password=$_POST['password']; $test_user_name = 'michelle_smith'; //for testing purpose only $test_password = 'msmith321'; //for testing purpose only $user_name = $test_user_name; $password = $test_password; // here user_name is key and password is the value of an array.. // website owner has to add new user/site member manually in $login_array $login_array = array( 'user_name' => 'password', 'alex_duff' => 'alx321', 'xena78' => 'xena321', 'dela_pena' => 'delp321', 'shawn_1981' => 'shw81', 'michelle_smith' => 'msmith321'); ksort ($login_array); reset($login_array); if (isset($login_array[$user_name])) { $pass_check = $login_array[$user_name]; if ($password === $pass_check) { echo "Welcome, $user_name!n<br>"; //may redirect to specific webpage. } else { echo "Please try again!"; //may redirect to Error page. } } else { echo "Please register with us. Thanks!"; //may redirect to registration page. exit(); } echo("n<br>"); echo 'Thanks to Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans, Rasmus Lerdorf, Sam Ruby, Sascha Schumann, Zeev Suraski, Jim Winstead, Andrei Zmievski for wonderful PHP!';
  • 29. ?> carl at linkleaf dot com06-Sep-2007 11:36 Its worth noting that there does not appear to be any functional limitations on the length or content of string indexes. The string indexes for your arrays can contain any characters, including new line characters, and can be of any length: <?php $key = "XXXXX"; $test = array($key => "test5"); for ($x = 0; $x < 500; $x++) { $key .= "X"; $value = "test" . strlen($key); $test[$key] = $value; } echo "<pre>"; print_r($test); echo "</pre>"; ?> Keep in mind that using extremely long array indexes is not a good practice and could cost you lots of extra CPU time. However, if you have to use a long string as an array index you won't have to worry about the length or content. Gautam30-Aug-2007 01:56 <?php //EXAMPLE of Multi-Dimentional Array where as an array's keys are an array itself. //It's so easy to create one like this. $movie_to_watch = array ('Action'=> array('Kanu Reeves' => 'Matrix Reloaded', 'Pearce Brosnan' => 'Die Another Day', 'Tom Cruz' => 'Mission Impossible', 'Jason Statham' => 'Crank', 'Danzel Washington' => 'Man on Fire'), 'Comedy' => array ('Charlie Chaplin' => 'City Lights', 'Jim Carrey' => 'Cable Guy', 'Rowan Atkinson' => 'The Ultimate Disaster')); $type_wanted = 'Action'; //You may switch type from Action to Comedy. $hero_wanted = 'Pearce Brosnan'; // You may switch hero from Pearce Brosnan to Jim Carrey. print ("$hero_wanted 's $type_wanted movie is " . $movie_to_watch[$type_wanted][$hero_wanted]."."); // produces browser output as under: // Pearce Brosnan 's Action movie is Die Another Day. ?> Olegk, getmequick[at]gmail[dot]com21-Aug-2007 02:59 Hey..
  • 30. here is a function which helps to avoid using empty/isset checkings for arrays. (it's acts simillar to 'default' modifier in Smarty) Using this function you will avoid 'Undefined index' or 'Undefined offset' error. <?php $_POST['id']['other'] = 'val1'; /* key exist (same as $_POST['id'][other]) */ echo getRequestParam('id[other]', 'default value'); /* key doesn't exist, we get default value (same as $_POST['var']) */ echo getRequestParam('var', 'default value'); function getRequestParam( $var, $default = '', $method = 'post' ) { preg_match_all('!(w+)!i',$var, $match ); array_shift($match); $_vars = $match[0]; $ret = null; if( strtoupper($method) == 'POST' ) { $ret = _findRequestParam($_vars, $_POST); } elseif( strtoupper($method) == 'GET' ) { $ret = _findRequestParam($_vars, $_GET); } elseif( strtoupper($method) == 'COOKIE' ) { $ret = _findRequestParam($_vars, $_COOKIE); } elseif( strtoupper($method) == 'SESSION' ) { $ret = _findRequestParam($_vars, $_SESSION); } if (! $ret ) return $default; else return $ret; } /** @access private */
  • 31. function _findRequestParam($vars, $find_in , $curr_key = 0) { static $ret; if( array_key_exists($vars[$curr_key], $find_in) ) { if( count( $vars)-1 == $curr_key ) { $ret = $find_in[$vars[$curr_key]]; } elseif( $curr_key < count( $vars)-1 ) { _findRequestParam( $vars, $find_in[$vars[$curr_key]], $curr_key+1 ); } } return $ret; } ?> Hope this will help someone! conorj14-Jul-2007 08:34 Another note on unquoted array indices. Because it is first interpreted as a constant, it must obey the naming convention of constants. i.e. a letter or underscore followed by optional letter, digit and/or underscore characters. Therefore while the following array declaration is legal: $a = array('1st'=>'First','2nd'=>'Second'); Trying to access either array item as follows causes an error: $first = "$a[1st]"; $second = "$a[2nd]"; moehbass at gmail dot com10-Jul-2007 05:41 < b>Mark Gukov</b> wrote below: Regarding the fact that there's no need to quote arrays keys when enclosed in double quotes: it only applies to single dimensional arrays. The following works fine: <?php $r['a'] = 'apple'; echo "$r[a] is tasty."; ?> ...but in the case of multi-dimensional arrays: <?php $r['a']['b'] = 'banana'; echo "$r[a][b] is tasty."; ?> would result in "Array[c] is tasty." -----------------------------------------------------------------
  • 32. However, the following runs fine; $r['a']['b'] = 'banana'; echo "{$r[a][b]} is tasty."; Just box it! don dot hosek at gmail dot com23-May-2007 05:37 It's slightly faster to use array_splice to remove an element of an array: array_splice($array, $index, 1) than to do it using the suggested method of unset and reindex: unset($array[$index]); $array = array_values($array); The difference, however, is very small. With 950 iterations I had times of unset and reindex: 0.22837495803833 splice: 0.22392416000366 lesantoso at yahoo dot com20-Mar-2007 02:14 This Indonesian number speller function is twice faster(*) than the one provided in class Terbilang by anghuda(at)gmail(dot)com (25-May-2006 08:52): http://www.lesantoso.com/terbilang.html (*) 2.1 vs. 4.2 seconds in processing 10000 random numbers Spudley16-Mar-2007 01:44 On array recursion... Given the following code: < ? $myarray = array('test',123); $myarray[] = &$myarray; print_r($myarray); ?> The print_r() will display *RECURSION* when it gets to the third element of the array. There doesn't appear to be any other way to scan an array for recursive references, so if you need to check for them, you'll have to use print_r() with its second parameter to capture the output and look for the word *RECURSION*. It's not an elegant solution, but it's the only one I've found, so I hope it helps someone. kal at kalunite dot com i mean dot net16-Jan-2007 05:55 About the automatic conversion of bare strings... My opinion is that it never should have been implemented. Isn't it easier to NOT implement this "handy" feature in the first place? It is such a convenient way for "smart" programmers to write unsafe, not-futureproof code. Please remove this feature from future versions of PHP, please. (Hey, if you could change the OOP mechanisms between PHP 4 and PHP 5, why can't you make this change, right?) 25-Oct-2006 09:18 This page should include details about how associative arrays are implemened inside PHP; e.g. using hash-maps or b-trees. This has important implictions on the permance characteristics of associative
  • 33. arrays and how they should be used; e.g. b-tree are slow to insert but handle collisions better than hashmaps. Hashmaps are faster if there are no collisions, but are slower to retrieve when there are collisions. These factors have implictions on how associative arrays should be used. Mark Gukov27-Sep-2006 02:18 Regarding the fact that there's no need to quote arrays keys when enclosed in double quotes: it only applies to single dimensional arrays. The following works fine: <?php $r['a'] = 'apple'; echo "$r[a] is tasty."; ?> ...but in the case of multi-dimensional arrays: <?php $r['a']['b'] = 'banana'; echo "$r[a][b] is tasty."; ?> would result in "Array[c] is tasty." petruzanautico at yahoo dot com dot ar21-Sep-2006 08:30 Regarding the message of phoenixbytes: The line foreach($bad as $baddies); will just yield in $baddies the last value of the array $bad. I think that wasn't your intention, in that case there are faster and better ways than foreach. I think what you wanted to do is: <?php foreach($bad as $baddies) // make a collection { if (preg_match("/$baddies/i", $mailto)) // find a match { $addrmail = "false"; } else { $addrmail = "true"; } } // foreach end ?> php dot net at todandlorna dot com25-Jul-2006 04:28 in response to ch dot martin at gmail dot com If you are using the following code: <?php $r = array('05' => "abc", '35' => "def"); foreach ($r as $key=>$value) var_dump($key); ?>
  • 34. and you need the array key '35' to be a string (for looping maybe), you can make sure the key is a string by appending a 0 on the front. '035' instead of '35' ch dot martin at gmail dot com08-Jun-2006 11:40 Extremely irritating quirk regarding the variable types of array keys: <?php $r = array('05' => "abc", '35' => "def"); foreach ($r as $key=>$value) var_dump($key); ?> The first var_dump for '05' is: string(2) "05" as expected. But the second, '35', turns out as: int(35) Php apparently decided to make the 35 became an int, but not the 05 (presumably because it leads with a zero). As far as I can see, there is absolutely no way of making string(2) "35" an array key. anghuda(at)gmail(dot)com25-May-2006 06:52 this is simpler tha function display_angka_bilangan by ktaufik(at)gmail(dot)com (16-Feb-2005 12:40) < ? /* * * Class : Terbilang * Spell quantity numbers in Indonesian or Malay Language * * * author: huda m elmatsani * 21 September 2004 * freeware * * example: * $bilangan = new Terbilang; * echo $bilangan -> eja(137); * result: seratus tiga puluh tujuh * * */ Class Terbilang { function terbilang() { $this->dasar = array(1=>'satu','dua','tiga','empat','lima','enam', 'tujuh','delapan','sembilan'); $this->angka = array(1000000000,1000000,1000,100,10,1); $this->satuan = array('milyar','juta','ribu','ratus','puluh',''); }
  • 35. function eja($n) { $i=0; while($n!=0){ $count = (int)($n/$this->angka[$i]); if($count>=10) $str .= $this->eja($count). " ".$this->satuan[$i]." "; else if($count > 0 && $count < 10) $str .= $this->dasar[$count] . " ".$this->satuan[$i]." "; $n -= $this->angka[$i] * $count; $i++; } $str = preg_replace("/satu puluh (w+)/i","1 belas",$str); $str = preg_replace("/satu (ribu|ratus|puluh|belas)/i","se1",$str); return $str; } } ?> benjcarson at digitaljunkies dot ca09-May-2006 01:46 phoenixbytes: The regex you have posted for matching email addresses is incorrect. Among other things, it does not allow '+' before the '@' (which is perfectly valid and can be quite useful to separate extensions of a single address). RFC 822 [1] defines the grammar for valid email addresses, and (the extemely long) regex implementing can be found at [2]. Even the "Add Note" page here at php.net says: [quote] And if you're posting an example of validating email addresses, please don't bother. Your example is almost certainly wrong for some small subset of cases. See this information from O'Reilly Mastering Regular Expressions book for the gory details. [/quote] A note to others: please do your homework before writing another email-matching regex. [1] http://www.ietf.org/rfc/rfc0822.txt?number=822 [2] http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html. phoenixbytes at o2 dot co dot uk16-Apr-2006 05:10 i use the array() function for deciding upon an email address's validity, i have a 'wap stalker' of my site that loves to exploit every hole i leave, so i used the following script to avoid being email bombed with my own file sender script, the array() is used to filter out undesirable email providers and, of course, any and all of my own addresses. before all that i used a REGEX to make sure it's an actual email address before going any further. $mailto = "mail.domain.org"; // the input to be tested if (preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+.[A-Z]{2,6}$/i", $mailto)) // see if it's really an email address
  • 36. { $bad = array('mytrashmail.com', 'mymail.ro', 'acasa.ro', 'gala.net', 'phoenixbytes'); // pick out the victims foreach($bad as $baddies); // make a collection if (preg_match("/$baddies/i", $mailto)) // find a match { $addrmail = "false"; } else { $addrmail = "true"; } } else { $addrmail = "false"; } $addrmail can then be used in an argument. $baddies can be used to give a list, if necessary. i hope this helps someone. crozzer01-Apr-2006 12:54 Passing variables into the array constructor: Just a NOOB pointer, I couldn't find other examples for this. If you want to pass the value of an existing variable into the array() constructor, you can quote it or not, both methods are valid. < ? $foo_value = 'foo string'; $bar_value = 'bar string'; $myArray = array( 'foo_key' => $foo_value, // not quoted 'bar_key' => "$bar_value"); // quoted foreach ($myArray as $k => $v) { echo "$myArray[$k] => $v.<br />n"; } ?> Both of these will work as expected, but the unqoted $foo_value method above is marginally faster because adding quotes adds an additional string de-reference. sales at maboom dot ch13-Dec-2005 09:41 if you need to check a multidimensonal array for values it's handy to store it like $ar['key1'][0] $ar['key2'][0] $ar['key3'][0] $ar['key1'][1] $ar['key2'][1]
  • 37. $ar['key3'][1] and to loop the keys. Fill the array (from a database-request): while($rf=mysql_fetch_row($rs)) { $nr=$rf[0]; $channel['nr'][$nr]=$rf[1]; $channel['chatter'][$nr]=$rf[2]; } Call the values: foreach(array_keys($channel['nr']) as $test) { print ' nr:'.$test.'<br>'; print 'value nr: '.$channel['nr'][$test].'<br>'; print ' chatter: '.$channel['chatter'][$test].'<br>'; } This is useful, if you have to look later for an element inside the array: if(in_array($new_value,$channel['nr'])) print 'do something.'; Hope this helps someone. ia [AT] zoznam [DOT] sk30-Sep-2005 02:55 Regarding the previous comment, beware of the fact that reference to the last value of the array remains stored in $value after the foreach: <?php foreach ( $arr as $key => &$value ) { $value = 1; } // without next line you can get bad results... //unset( $value ); $value = 159; ?> Now the last element of $arr has the value of '159'. If we remove the comment in the unset() line, everything works as expected ($arr has all values of '1'). Bad results can also appear in nested foreach loops (the same reason as above). So either unset $value after each foreach or better use the longer form: <?php foreach ( $arr as $key => $value ) {
  • 38. $arr[ $key ] = 1; } ?> stochnagara at hotmail dot com27-Sep-2005 01:53 Regarding the previous comment, thw following code does the job: <?php foreach($arr as $key => &$value) { $value = 1; } ?> jazepstein OverAt GeeMail dot com19-Sep-2005 06:14 Regarding the previous comment, the fact that this code has no effect is perfectly expected: <?php foreach($arr as $value) { $value = 1; } ?> The reason that this doesn't work, is because each time that PHP goes through the loop, it _copies_ the value of the array element into $value. So if you assign a new value to the data in $value, it has no effect on the actual array, because you only changed the value of the copy that was put in $value. As was discovered in the previous post, the only way to get around this problem is to change the value in the original array. Hence, a typical foreach should instead look like this: <?php foreach($arr as $key => $value) { $arr[$key] = 1; } ?> caifara aaaat im dooaat be28-Aug-2005 02:28 [Editor's note: You can achieve what you're looking for by referencing $single, rather than copying it by value in your foreach statement. See http://php.net/foreach for more details.] Don't know if this is known or not, but it did eat some of my time and maybe it won't eat your time now... I tried to add something to a multidimensional array, but that didn't work at first, look at the code below to see what I mean: <?php $a1 = array( "a" => 0, "b" => 1 ); $a2 = array( "aa" => 00, "bb" => 11 ); $together = array( $a1, $a2 ); foreach( $together as $single ) { $single[ "c" ] = 3 ;
  • 39. } print_r( $together ); /* nothing changed result is: Array ( [0] => Array ( [a] => 0 [b] => 1 ) [1] => Array ( [aa] => 0 [bb] => 11 ) ) */ foreach( $together as $key => $value ) { $together[$key]["c"] = 3 ; } print_r( $together ); /* now it works, this prints Array ( [0] => Array ( [a] => 0 [b] => 1 [c] => 3 ) [1] => Array ( [aa] => 0 [bb] => 11 [c] => 3 ) ) */ ?> uzakufuklar at hotmail dot com03-Aug-2005 11:24 It is a kind of simple muti-dimensional array list. I have made it just to give a simple idea. <?php echo "Here we'll see how to create a multi-dimensional array.n"; $a=array('fruits'=>array('a'=>'orange', 'b'=>'grape',c=>'apple'), 'numbers'=>array(1,2,3,4,5,6), 'holes'=>array('first',5=>'second', 'third') ); foreach($a as $list=>$things){
  • 40. foreach($things as $newlist=>$counter){ echo $counter; } } ?> z22-Apr-2005 12:10 Here's a simple function to insert a value into some position in an array <?php function array_insert($array,$pos,$val) { $array2 = array_splice($array,$pos); $array[] = $val; $array = array_merge($array,$array2); return $array; } ?> and now for example... <?php $a = array("John","Paul","Peter"); $a = array_insert($a,1,"Mike"); ?> Now $a will be "John","Mike","Paul","Peter" jeff splat codedread splot com21-Apr-2005 09:16 Beware that if you're using strings as indices in the $_POST array, that periods are transformed into underscores: < html> < body> <?php printf("POST: "); print_r($_POST); printf("<br/>"); ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="hidden" name="Windows3.1" value="Sux"> <input type="submit" value="Click" /> < /form> < /body> < /html> Once you click on the button, the page displays the following: POST: Array ( [Windows3_1] => Sux ) roland dot swingler at transversal dot com05-Apr-2005 08:24 Something that tripped me up: If you mix string and integer keys, be careful if you are doing a comparison on the to find if a string key exists. For example, this will not do what you expect it to do: <?php $exampleArray = array();
  • 41. $exampleArray['foo'] = 'bar'; $exampleArray[] = 'Will create 0 index'; $keyWeAreLookingFor = "correctKey"; foreach ($exampleArray as $key => $value){ if ($key == $keyWeAreLookingFor){ print "Found Key"; } } ?> It will print "Found Key", because (I presume) when PHP makes the comparison between the string "correctKey" and the index 0, it casts the string to an integer, rather than casting 0 to the string "0" and then doing the comparison. Using === fixes the problem: <?php foreach ($exampleArray as $key => $value){ if ($key === $keyWeAreLookingFor){ print "Found Key"; } } ?> lars-phpcomments at ukmix dot net28-Mar-2005 08:40 Used to creating arrays like this in Perl? @array = ("All", "A".."Z"); Looks like we need the range() function in PHP: <?php $array = array_merge(array('All'), range('A', 'Z')); ?> You don't need to array_merge if it's just one range: <?php $array = range('A', 'Z'); ?> mortoray at ecircle-ag dot com16-Feb-2005 12:59 On array copying a deep copy is done of elements except those elements which are references, in which case the reference is maintained. This is a very important thing to understand if you intend on mixing references and recursive arrays. By Example: $a = array( 1 ); $aref_a = array( &$a ); $copy_aref_a = $aref_a; $acopy_a = array( $a ); $copy_acopy_a = $acopy_a; $a[] = 5; $acopy_a[0][] = 6;
  • 42. print_r( $aref_a ); //Shows: ( (1,5) ) print_r( $copy_aref_a ); //Shows: ( (1,5) ) print_r( $acopy_a ); //Shows: ( (1, 6) ) print_r( $copy_acopy_a ); //Shows: ( (1) ) ktaufik(at)gmail(dot)com16-Feb-2005 12:40 For you who works for localized "say" number to letter ( ex , 7=> seven, 8=>eight) for Bahasa Indonesia. Indonesia "say" or "Terbilang" is based on 3 digit number. thousands, millions and trillions .... will be based on the 3 digit number. In Indonesia you say 137 as "Seratus Tiga Puluh Tujuh" <?php //build random 3 digit number to be "said" in Bahasa Indonesia $x=rand(0,9); $y=rand(0,9); $z=rand(0,9); function display_angka_bilangan($n) { $angka = array( 1 => 'satu', 2 => 'dua', 3 => 'tiga', 4 => 'empat', 5 => "lima", 6 => 'enam', 7 => 'tujuh', 8 => 'delapan', 9 => 'sembilan' ); return $angka[$n]; } // Terbilang X-------Say X if ($x==1){$terbilangx="seratus ";} elseif ($x==0){$terbilangx='';} else {$terbilangx=''.display_angka_bilangan($x).' '.'ratus ';} // Terbilang Y ------Say Y if ($y==0){$terbilangy='';} elseif ($y==1 && $z==1){$terbilangy="sebelas";$terbilangz='';} elseif ($y==1 && $z==0){$terbilangy="sepuluh ";$terbilangz='';} elseif ($y==1 && $z!==1 && $z!==0){$terbilangy=''.display_angka_bilangan($z).' belas ';} else {$terbilangy=''.display_angka_bilangan($y).' '.'puluh ';} // Terbilang z ------Say z if ($z==0){$terbilangz="";} elseif ($z==0 && $y==1){$terbilangz="";} elseif ($z==1 && $y==1){$terbilangz="";} elseif($y==0) {$terbilangz="".display_angka_bilangan($z);} elseif ($y==1 && $z!==1 && $z!==0) {$terbilangz="";} else {$terbilangz="".display_angka_bilangan($z);}; $terbilang=$terbilangx.$terbilangy.$terbilangz; echo $x.$y.$z." ";
  • 43. echo $terbilang; ?> Hope it is useful ktaufik(at)gmail(dot)com db05-Jan-2005 07:06 [Editor's Note: (Second example.) These are not "arrays in arrays". These are single-dimensional arrays containing stdClass objects; all objects are referenced by default in PHP5. You can see in the var_dump output that they point to the same object.] Attention with Arrays in Arrays! If you copy (=) an array which contains arrays it will be REFERENCED not COPIED. Example: <?php /* GOOD ONE */ echo "<b>Here copy (=) works correct:</b><br>"; /* Initialise Array 1 */ $x1 = array(array(10,20),array(30,40)); /* COPY Array */ $x2 = $x1; /* Change some values in Array 2 */ $x2[0][0]=77; $x2[1][1]=99; echo "<b>Original:</b><pre>"; var_dump($x1); echo "</pre><b>Changed Copy:</b><pre>"; var_dump($x2); /* BAAAAAAAD ONE */ echo "</pre><hr><b>Here copy (=) FAILS:</b><br>"; /* Initialise Array 1 */ $a1[0]->bla[0]->id=10; $a1[0]->bla[1]->id=20; $a1[1]->bla[0]->id=30; $a1[1]->bla[1]->id=40; /* COPY Array */ $a2 = $a1; /* Change some values in Array 2 (!) */ $a2[0]->bla[0]->id=77; $a2[1]->bla[1]->id=99; echo "<b>Original:</b><pre>"; var_dump($a1); echo "</pre><b>Changed Copy:</b><pre>"; var_dump($a2); echo "</pre>"; php?> The output of $a1 and $a2 will be the same.. Joe Morrison <jdm at powerframe dot com>08-Nov-2004 01:26
  • 44. Programmers new to PHP may find the following surprising: <?php $x[1] = 'foo'; $x[0] = 'bar'; echo "Original array:n"; var_dump($x); array_pop($x); echo "Array after popping last element:n"; var_dump($x); ?> The surprise is that element 0 is deleted, not element 1. Apparently the notion of "last element" has more to do with how the array is stored internally than with which element has the highest numeric index. I recently translated a Perl program to PHP and was bitten by this one. My solution was to identify all the places in my code where I could prove that the array elements were assigned sequentially. In those cases it is safe to use array_pop, array_splice, etc. since the array indices correspond with the array layout. For the other cases, my solution was to write replacements for the built-in array functions such as this one: <?php function safe_pop(&$a) { if (!isset($a)) return; if (!is_array($a)) return; if (count($a) == 0) return; unset($a[max(array_keys($a))]); } ?> Cameron Brown18-Nov-2003 08:51 Negative and positive array indices have different behavior when it comes to string<->int conversion. 1 and "1" are treated as identical indices, -1 and "-1" are not. So: $arr["1"] and $arr[1] refer to the same element. $arr["-1"] and $arr[-1] refer to different elements. The following code: < ? $arr[1] = "blue";
  • 45. $arr["1"] = "red"; $arr[-1] = "blue"; $arr["-1"] = "red"; var_dump($arr); ?> produces the output: array(3) { [1]=> string(3) "red" [-1]=> string(4) "blue" ["-1"]=> string(3) "red" } This code should create an array with either two or four elements. Which one should be the "correct" behavior is an exercise left to the reader.... akamai at veloxmail dot com dot br16-Jul-2003 04:22 It is quite simple, but don't forget when you'll using foreach with forms arrays. If your field name is: < input type="checkbox" name="foo['bar'][]" ... It doesn't work. This should work: < input type="checkbox" name="foo[bar][]" ... agape_logos at shaw dot ca11-Jul-2003 04:59 I was having trouble getting javascript arrays and php arrays to work together with a Check All checkboxe. Here is a simple solution. Clicking the 'Check All' checkbox will check all checkboxes on the form. < script language="JavaScript"> function chkAll(frm, arr, mark) { for (i = 0; i <= frm.elements.length; i++) { try{ if(frm.elements[i].name == arr) { frm.elements[i].checked = mark; } } catch(er) {} } } < /script> < form name='foo'> < input type="checkbox" name="ca" value="1" onClick="chkAll(this.form, 'formVar[chkValue][]', this.checked)"> <?php for($i = 0; $i < 5; $i++){ echo("<input type='checkbox' name='formVar[chkValue][]' value='$i'>"); } ?>
  • 46. </form> Dean M. chroniton .at. gmx .dot. li26-Mar-2003 10:13 I didn't find this anywhere in the docs and i think it is worth a mention: $a[] = &$a; print_r($a); // will output: /* Array ( [0] => Array *RECURSION* ) */ // this means that $a[0] is a reference to $a ( that is detected by print_r() ). I guess this is what the manual calls 'recursive arrays'. 07-Mar-2003 03:28 "Using NULL as a key will evaluate to an empty string. Using an emptry string as key will create (or overwrite) a key with an empty string and its value, it is not the same as using empty brackets." If you create an array like this: $foo = array(null => 'bar'); And then want to access 'bar', you must use this syntax: echo $foo['']; // notice the two single quotes This will of course cause a fatal error: echo $foo[]; wmoranATpotentialtechDOTcom29-Nov-2002 03:10 Dereferencing arrays takes some time, but is not terribly expensive. I wrote two dummy loops to test performance: for ($i =0; $i < count($a); $i++) { $x = $a[$b[$i]]; $y = $a[$b[$i]]; $z = $a[$b[$i]]; } for ($i =0; $i < count($a); $i++) { $q = $b[$i]; $x = $a[$q]; $y = $a[$q]; $z = $a[$q]; } The first loop is 6.5% slower than the second. Meaning that dereferencing arrays is not terribly expensive, unless you do it a whole lot. I would expect that each extra reference costs about 3% in speed. The lesson is that if you're going to be using a specific value in an array for a number of operations, you can gain a little speed by assigning it to a temp variable (or creating a reference with $q = &$b[$i]) but it's not worth getting crazy over.
  • 47. I tested this with iterations of 10,000 and 100,000 on php 4.2 and the results were consistent. mu at despammed dot com14-Oct-2002 11:50 Recursive arrays and multi-dimensional arrays are the same thing and completely identical. The following confirms this: $fruits1["european"]["green"] = "Apple"; $fruits2 = array ( "european" => array ( "green" => "Apple")); print ($fruits1 === $fruits2); Result: 1 (= true) hramrach_L at centrum. cz ;-)11-Jun-2002 05:40 Arrays can be merged using + as discussed in the notes for array_merge. http://www.php.net/manual/en/function.array-merge.php philip at boone dot at24-May-2002 06:06 For all of you having problems when using php arrays in an HTML form input field name, and wanting to validate the form using javascript for example, it is much easier to specify an id for the field as well, and use this id for validation. Example: < input type="text" id="lastname" name="fields[lastname]"> then in the javascript check: if(formname.lastname.value == "") { alert("please enter a lastname!"); } This works very well. If you have any problems with it, let me know.