array

(PHP 4, PHP 5, PHP 7, PHP 8)

arrayCreate an array

Description

array(mixed ...$values): array

Creates an array. Read the section on the array type for more information on what an array is.

Parameters

values

Syntax "index => values", separated by commas, define index and values. index may be of type string or integer. When index is omitted, an integer index is automatically generated, starting at 0. If index is an integer, next generated index will be the biggest integer index + 1. Note that when two identical indices are defined, the last overwrites the first.

Having a trailing comma after the last defined array entry, while unusual, is a valid syntax.

Return Values

Returns an array of the parameters. The parameters can be given an index with the => operator. Read the section on the array type for more information on what an array is.

Examples

The following example demonstrates how to create a two-dimensional array, how to specify keys for associative arrays, and how to skip-and-continue numeric indices in normal arrays.

Example #1 array() example

<?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")
);
?>

Example #2 Automatic index with array()

<?php
$array
= array(1, 1, 1, 1, 1, 8 => 1, 4 => 1, 19, 3 => 13);
print_r($array);
?>

The above example will output:

Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 13
    [4] => 1
    [8] => 1
    [9] => 19
)

Note that index '3' is defined twice, and keep its final value of 13. Index 4 is defined after index 8, and next generated index (value 19) is 9, since biggest index was 8.

This example creates a 1-based array.

Example #3 1-based index with array()

<?php
$firstquarter
= array(1 => 'January', 'February', 'March');
print_r($firstquarter);
?>

The above example will output:

Array
(
    [1] => January
    [2] => February
    [3] => March
)

As in Perl, you can access a value from the array inside double quotes. However, with PHP you'll need to enclose your array between curly braces.

Example #4 Accessing an array inside double quotes

<?php

$foo
= array('bar' => 'baz');
echo
"Hello {$foo['bar']}!"; // Hello baz!

?>

Notes

Note:

array() is a language construct used to represent literal arrays, and not a regular function.

See Also

  • array_pad() - Pad array to the specified length with a value
  • list() - Assign variables as if they were an array
  • count() - Counts all elements in an array or in a Countable object
  • range() - Create an array containing a range of elements
  • foreach
  • The array type
add a note

User Contributed Notes 18 notes

up
116
ole dot aanensen at gmail dot com
10 years ago
As of PHP 5.4.x you can now use 'short syntax arrays' which eliminates the need of this function.

Example #1 'short syntax array'
<?php
$a
= [1, 2, 3, 4];
print_r($a);
?>

The above example will output:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)

Example #2 'short syntax associative array'
<?php
$a
= ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
print_r($a);
?>

The above example will output:
Array
(
[one] => 1
[two] => 2
[three] => 3
[four] => 4
)
up
3
jon hohle
16 years ago
Here are shorter versions of sam barrow's functions. From a PHP perspective these are O(1) (without getting into what's going on in the interpreter), instead of O(n).

<?php
function randomKey(array $array)
{
return
randomElement(array_keys($array));
}

function
randomElement(array $array)
{
if (
count($array) === 0)
{
trigger_error('Array is empty.', E_USER_WARNING);
return
null;
}

$rand = mt_rand(0, count($array) - 1);
$array_keys = array_keys($array);

return
$array[$array_keys[$rand]];
}
?>
up
1
jupiter at nospam dot com
18 years ago
<?php

// changes any combination of multiarray elements and subarrays
// into a consistent 2nd level multiarray, tries to preserves keys
function changeMultiarrayStructure($multiarray, $asc = 1) {
if (
$asc == 1) { // use first subarrays for new keys of arrays
$multiarraykeys = array_reverse($multiarray, true);
} else {
// use the last array keys
$multiarraykeys = $multiarray; // use last subarray keys
} // end array reordering
$newarraykeys = array(); // establish array
foreach ($multiarraykeys as $arrayvalue) { // build new array keys
if (is_array($arrayvalue)) { // is subarray an array
$newarraykeys = array_keys($arrayvalue) + $newarraykeys;
}
// if count(prevsubarray)>count(currentarray), extras survive
} // end key building loop
foreach ($multiarray as $newsubarraykey => $arrayvalue) {
if (
is_array($arrayvalue)) { // multiarray element is an array
$i = 0; // start counter for subarray key
foreach ($arrayvalue as $subarrayvalue) { // access subarray
$newmultiarray[$newarraykeys[$i]][$newsubarraykey] = $subarrayvalue;
$i++; // increase counter
} // end subarray loop
} else { // multiarray element is a value
foreach ($newarraykeys as $newarraykey) { // new subarray keys
$newmultiarray[$newarraykey][$newsubarraykey] = $arrayvalue;
}
// end loop for array variables
} // end conditional
} // end new multiarray building loop
return $newmultiarray;
}

// will change
$old = array('a'=>1,'b'=>array('e'=>2,'f'=>3),'c'=>array('g'=>4),'d'=>5);
// to
$new = array('e'=>array('a'=>1,'b'=>2,'c'=>4,'d'=>5),
'f'=>array('a'=>1,'b'=>3,'d'=>5));

// note: if $asc parameter isn't default, last subarray keys used

?>

The new key/value assignment pattern is clearer with bigger arrays.
I use this to manipulate input/output data from my db. Enjoy.
up
0
Marcel G
15 years ago
I encountered the following but didn't see it documented/reported anywhere so I'll just mentioned it here.

As written in the manual:
"When index is omitted, an integer index is automatically generated, starting at 0. If index is an integer, next generated index will be the biggest integer index + 1".

This generated index has always the largest integer used as a key so far. So adding $a[5] = 'foo'; after an $a[10] = 'bar'; will not force the next generated index to be 6 but to be 11 as 10 was the highest index encountered until here.

Anyway, the following can happen:
<?php
$max_int
= 2147483647; // Max value for integer on a 32-bit system
$arr = array();

$arr[1] = 'foo'; // New generated index will be 2
$arr[ $max_int ] = 'bar'; // Caution: Next generated index will be -2147483648 due to the integer overflow!
$arr[0] = 'bar'; // The highest value should be 2147483648 but due to the i-overflow it is -2147483648 so current index 0 is larger. The new generated index therefore is 1!
$arr[] = 'failure'; // Warning: Cannot add element to the array as the next element is already occupied.
?>
up
0
jonberglund at gmail dot com
16 years ago
The following function (similar to one above) will render an array as a series of HTML select options (i.e. "<option>...</option>"). The problem with the one before is that there was no way to handle <optgroup>, so this function solves that issue.

function arrayToSelect($option, $selected = '', $optgroup = NULL)
{
$returnStatement = '';

if ($selected == '') {
$returnStatement .= '<option value="" selected="selected">Select one...</option>';
}

if (isset($optgroup)) {
foreach ($optgroup as $optgroupKey => $optgroupValue) {
$returnStatement .= '<optgroup label="' . $optgroupValue . '">';

foreach ($option[$optgroupKey] as $optionKey => $optionValue) {
if ($optionKey == $selected) {
$returnStatement .= '<option selected="selected" value="' . $optionKey . '">' . $optionValue . '</option>';
} else {
$returnStatement .= '<option value="' . $optionKey . '">' . $optionValue . '</option>';
}
}

$returnStatement .= '</optgroup>';
}
} else {
foreach ($option as $key => $value) {
if ($key == $selected) {
$returnStatement .= '<option selected="selected" value="' . $key . '">' . $value . '</option>';
} else {
$returnStatement .= '<option value="' . $key . '">' . $value . '</option>';
}
}
}

return $returnStatement;
}

So, for example, I needed to render a list of states/provinces for various countries in a select field, and I wanted to use each country name as an <optgroup> label. So, with this function, if only a single array is passed to the function (i.e. "arrayToSelect($stateList)") then it will simply spit out a bunch of "<option>" elements. On the other hand, if two arrays are passed to it, the second array becomes a "key" for translating the first array.

Here's a further example:

$countryList = array(
'CA' => 'Canada',
'US' => 'United States');

$stateList['CA'] = array(
'AB' => 'Alberta',
'BC' => 'British Columbia',
'AB' => 'Alberta',
'BC' => 'British Columbia',
'MB' => 'Manitoba',
'NB' => 'New Brunswick',
'NL' => 'Newfoundland/Labrador',
'NS' => 'Nova Scotia',
'NT' => 'Northwest Territories',
'NU' => 'Nunavut',
'ON' => 'Ontario',
'PE' => 'Prince Edward Island',
'QC' => 'Quebec',
'SK' => 'Saskatchewan',
'YT' => 'Yukon');

$stateList['US'] = array(
'AL' => 'Alabama',
'AK' => 'Alaska',
'AZ' => 'Arizona',
'AR' => 'Arkansas',
'CA' => 'California',
'CO' => 'Colorado',
'CT' => 'Connecticut',
'DE' => 'Delaware',
'DC' => 'District of Columbia',
'FL' => 'Florida',
'GA' => 'Georgia',
'HI' => 'Hawaii',
'ID' => 'Idaho',
'IL' => 'Illinois',
'IN' => 'Indiana',
'IA' => 'Iowa',
'KS' => 'Kansas',
'KY' => 'Kentucky',
'LA' => 'Louisiana',
'ME' => 'Maine',
'MD' => 'Maryland',
'MA' => 'Massachusetts',
'MI' => 'Michigan',
'MN' => 'Minnesota',
'MS' => 'Mississippi',
'MO' => 'Missouri',
'MT' => 'Montana',
'NE' => 'Nebraska',
'NV' => 'Nevada',
'NH' => 'New Hampshire',
'NJ' => 'New Jersey',
'NM' => 'New Mexico',
'NY' => 'New York',
'NC' => 'North Carolina',
'ND' => 'North Dakota',
'OH' => 'Ohio',
'OK' => 'Oklahoma',
'OR' => 'Oregon',
'PA' => 'Pennsylvania',
'RI' => 'Rhode Island',
'SC' => 'South Carolina',
'SD' => 'South Dakota',
'TN' => 'Tennessee',
'TX' => 'Texas',
'UT' => 'Utah',
'VT' => 'Vermont',
'VA' => 'Virginia',
'WA' => 'Washington',
'WV' => 'West Virginia',
'WI' => 'Wisconsin',
'WY' => 'Wyoming');

...

<select name="state" id="state"><?php echo arrayToSelect($stateList,'',$countryList) ?></select>
<select name="country" id="country"><?php echo arrayToSelect($countryList,'US') ?></select>
up
-1
Mike Mackintosh
16 years ago
If you need to add an object as an array key, for example an object from Simple XML Parser, you can use the following.

File.XML
<?xml version="1.0" encoding="UTF-8"?>
<Settings type="General">
<Setting name="SettingName">This This This</Setting>
</Settings>

The script:
<?php
$raw
= $xml = new SimpleXMLElement('File.XML');
foreach(
$raw->Setting as $A => $B)
{
// Set Array From XML
$Setting[(string) $B['name']] = (string) $B[0];
}
?>
By telling the key to read the object as a string, it will let you set it.

Hope this helps someone out!
up
-2
slicky at newshelix dot com
23 years ago
Notice that you can also add arrays to other arrays with the $array[] "operator" while the dimension doesn't matter.

Here's an example:
$x[w][x] = $y[y][z];
this will give you a 4dimensional assosiative array.
$x[][] = $y[][];
this will give you a 4dimensional non assosiative array.

So let me come to the point. This get interessting for shortening things up. For instance:

<?php
foreach ($lines as $line){
if(!
trim($line)) continue;
$tds[] = explode("$delimiter",$line);
}
?>
up
-5
brian at blueeye dot us
19 years ago
If you need, for some reason, to create variable Multi-Dimensional Arrays, here's a quick function that will allow you to have any number of sub elements without knowing how many elements there will be ahead of time. Note that this will overwrite an existing array value of the same path.

<?php
// set_element(array path, mixed value)
function set_element(&$path, $data) {
return (
$key = array_pop($path)) ? set_element($path, array($key=>$data)) : $data;
}
?>

For example:

<?php
echo "<pre>";
$path = array('base', 'category', 'subcategory', 'item');
$array = set_element($path, 'item_value');
print_r($array);
echo
"</pre>";
?>

Will display:
Array
(
[base] => Array
(
[category] => Array
(
[subcategory] => Array
(
[item] => item_value
)
)
)
)
up
-3
razvan_bc at yahoo dot com
4 years ago
an array can execute code.
i try this on php 7.4 (xampp version)

<?php

[
$msg='HI GUYS !'
,print ($msg)
,(function()use (
$msg){
print
'here is php';
})()
,print
' I`m just an array ,alive one'
];

?>
up
-5
r0h4rd at gmail dot com
13 years ago
"Quick and dirty" class to get an offset of multidimensional array by given path (sorry, that without comments).

<?php

class ArrayAsPathException extends Exception {}

class
ArrayAsPath {
protected
$data = array(),
$separator = '.';

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

public function
set ($value, $path = null) {
if (!isset(
$path)) {
$this->data = $value;
}

$separator = $this->separator;
$pathtoken = strtok($path, $separator);

$code = '';
$pices = '[\''.$pathtoken.'\']';
while (
$pathtoken !== false) {
if ((
$pathtoken = strtok($separator)) !== false) {
$code .= 'if (!isset($this->data'.$pices.')) $this->data'.$pices.' = array(); ';
$pices .= '[\''.$pathtoken.'\']';
} else {
$code .= 'return $this->data'.$pices.' = $value;';
}
}

return eval(
$code);
}

public function
get ($path = '', $default = null) {
$result = $this->data;
$separator = $this->separator;
$pathtoken = strtok($path, $separator);

while (
$pathtoken !== false) {
if (!isset(
$result[$pathtoken]) || is_string($result)) {
if (isset(
$default)) {
return
$default;
}

throw new
ArrayAsPathException ('Can\'t find "'.$pathtoken.'" in "'.$path.'"');
}

$result = $result[$pathtoken];
$pathtoken = strtok($separator);
}

return
$result ? $result : $default;
}

public function
has ($path) {
$result = $this->data;
$separator = $this->separator;
$pathtoken = strtok($path, $separator);

while (
$pathtoken !== false) {
if (!isset(
$result[$pathtoken]) || is_string($result)) {
return
false;
}

$result = $result[$pathtoken];
$pathtoken = strtok($separator);
}

return
true;
}

public function
setSepatator ($separator) {
$this->separator = $separator;
}

public function
getSeparator ($separator) {
return
$this->separator;
}
}

?>

Code:
<?php

$params
= new ArrayAsPath;
$params->set(array(
'foo' => array(
'bar' => array(
'item' => 'Value'
)
)
));

try {
$params->set('test', 'foo.bar.far.new');
printf(
'Array:<pre>%s</pre>
foo.bar.item:<pre>%s</pre>
foo.bar.far:<pre>%s</pre>
foo.bar.far.new<pre>%s</pre>'
,
var_export($params->get(), true),
var_export($params->get('foo.bar.item'), true),
var_export($params->get('foo.bar.far'), true),
var_export($params->get('foo.bar.far.new'), true)
);
} catch (
ArrayAsPathException $e) {
echo
'Oops! It seems that something is wrong. '.$e->getMessage();
}

?>

Will display:
Array:
array (
'foo' =>
array (
'bar' =>
array (
'item' => 'Value',
'far' =>
array (
'new' => 'test',
),
),
),
)

foo.bar.item:
'Value'

foo.bar.far:
array (
'new' => 'test',
)

foo.bar.far.new:
'test'
up
-2
jjm152 at hotmail dot com
22 years ago
The easiest way to "list" the values of either a normal 1 list array or a multi dimensional array is to use a foreach() clause.

Example for 1 dim array:

<?php
$arr
= array( 1, 2, 3, 4, 5 );
foreach (
$arr as $val ) {
echo
"Value: $Val\n";
}
?>

For multi dim array:

<?php
$arr
= array( 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four, 5 => 'five');
foreach ( $arr as $key => $value ) {
echo "Key: $key, Value: $value\n";
}
?>

This is quite possibly the easiest way i'
ve found to iterate through an array.
up
-4
rubein at earthlink dot net
23 years ago
Multidimensional arrays are actually single-dimensional arrays nested inside other single-dimensional arrays.

$array[0] refers to element 0 of $array
$array[0][2] refers to element 2 of element 0 of $array.

If an array was initialized like this:

$array[0] = "foo";
$array[1][0] = "bar";
$array[1][1] = "baz";
$array[1][2] = "bam";

then:
is_array($array) = TRUE
is_array($array[0]) = FALSE
is_array($array[1]) = TRUE
count($array) = 2 (elements 0 and 1)
count($array[1] = 3 (elements 0 thru 2)

This can be really useful if you want to return a list of arrays that were stored in a file or something:

$array[0] = unserialize($somedata);
$array[1] = unserialize($someotherdata);

if $somedata["foo"] = 42 before it was serialized previously, you'd now have this:
$array[0]["foo"] = 42
up
-4
php
18 years ago
This function converts chunks of a string in an array:

function array_str($str, $len) {
$newstr = '';
for($i = 0; $i < strlen($str); $i++) {
$newstr .= substr($str, $i, $len);
}
return $newstr;
}

use it as:

$str = "abcdefghilmn";
echo "<table width=\"100%\">\n";
foreach(array_str($str, 4) as $chunk) {
echo "<tr><td>".$chunk."</td></tr>\n";
}
echo "</table>";

this prints:

------
abcd
------
efgh
------
ilmn
------

It don't use regular expressions. Please add this function to php :)
up
-4
bill at carneyco dot com
18 years ago
I wanted to be able to control the flow of data in a loop instead of just building tables with it or having to write 500 select statements for single line items. This is what I came up with thanks to the help of my PHP brother in FL. Hope someone else gets some use out it.
<?

//set array variable
$results = array();

//talk to the db
$query = "SELECT * FROM yourtable";
$result = mysql_query($query) or die(mysql_error());

//count the rows and fields
$totalRows = mysql_num_rows($result);
$totalFields = mysql_num_fields($result);

//start the loop
for ( $i = 0; $i < $totalRows; ++$i ) {

//make it 2 dim in case you change your order
$results[$i] = mysql_fetch_array($result);

//call data at will controlling the loop with the array
echo $results[your_row_id]['your_field_name']; }

//print the entire array to see what lives where
print_r($results); ?>
up
-3
Anonymous
21 years ago
Similarly to a comment by stlawson at sbcglobal dot net on this page:
http://www.php.net/basic-syntax.instruction-separation

It is usually advisable to define your arrays like this:
$array = array(
'foo',
'bar',
);

Note the comma after the last element - this is perfectly legal. Moreover,
it's best to add that last comma so that when you add new elements to the
array, you don't have to worry about adding a comma after what used to be
the last element.

<?php
$array
= array(
'foo',
'bar',
'baz',
);
?>
up
-5
rdude at fuzzelish dot com
19 years ago
If you are creating an array with a large number of static items, you will find serious performance differences between using the array() function and the $array[] construct. For example:
<?
// Slower method
$my_array = array(1, 2, 3, ? 500);

// Faster method
$my_array[] = 1;
$my_array[] = 2;
$my_array[] = 3;
?
$my_array[] = 500;
?>
up
-4
jay at ezlasvegas dot net
22 years ago
If you want to create an array of a set size and you have PHP4, use
array_pad(array(), $SIZE, $INITIAL_VALUE); This can be handy if you wish
to initialize a bunch of variables at once:

list($Var1, $Var2, etc) = array_pad(array(), $NUMBER_OF_VARS,
$INITIAL_VALUE);

Jay Walker
Las Vegas Hotel Associate
http://www.ezlasvegas.net
up
-5
mads at __nospam__westermann dot dk
21 years ago
In PHP 4.2.3 (and maybe earlier versions) arrays with numeric indexes may be initialized to start at a specific index and then automatically increment the index. This will save you having to write the index in front of every element for arrays that are not zero-based.

The code:

<?php
$a
= array
(
21 => 1,
2,
3,
);
print
'<pre>';
print_r($a);
print
'</pre>';
?>

will print:

<?php
Array
(
[
21] => 1
[22] => 2
[23] => 3
)
?>
To Top