Array ����

PHP �е�����ʵ������һ������ӳ�䡣ӳ����һ�ְ� values ������ keys �����͡��������ںܶ෽�������Ż�����˿��԰����������������飬���б���������ɢ�б���ӳ���һ��ʵ�֣����ֵ䣬���ϣ�ջ�������Լ���������ԡ���������Ԫ�ص�ֵҲ��������һ�����飬���νṹ�Ͷ�ά����Ҳ������ġ�

������Щ�ṹ�����˱��ֲ�ķ�Χ��������ÿ�ֽṹ���ٻ��ṩһ�����ӡ�Ҫ�õ���Щ�ṹ�ĸ�����Ϣ������ο��йش˹������������������

�﷨

�������� array()

������ array() ���Խṹ���½�һ�����顣���������������ö��ŷָ��� ����key�� => ֵ��value���ԡ�

array(  key =>  value
     , ...
     )
// ����key��������һ������ integer ���ַ��� string
// ֵ��value���������������͵�ֵ

���һ�����鵥Ԫ֮��Ķ��ſ���ʡ�ԡ�ͨ�����ڵ������鶨���У����糣�� array(1, 2) ������ array(1, 2, )���Զ������鶨��ͨ���������һ�����ţ�����Ҫ���һ���µ�Ԫʱ�����㡣

�� 5.4 �����ʹ�ö����鶨���﷨���� [] ��� array()��

Example #1 һ��������

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
);

// �� PHP 5.4 ��
$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];
?>

key ������ integer ���� string��value �������������͡�

���� key �������µ�ǿ��ת����

  • �����кϷ�����ֵ���ַ����ᱻת��Ϊ���͡�������� "8" ʵ�ʻᱻ����Ϊ 8������ "08" �򲻻�ǿ��ת������Ϊ�䲻��һ���Ϸ���ʮ������ֵ��
  • ������Ҳ�ᱻת��Ϊ���ͣ���ζ����С�����ֻᱻ��ȥ��������� 8.7 ʵ�ʻᱻ����Ϊ 8��
  • ����ֵҲ�ᱻת�������͡������� true ʵ�ʻᱻ����Ϊ 1 ������ false �ᱻ����Ϊ 0��
  • Null �ᱻת��Ϊ���ַ����������� null ʵ�ʻᱻ����Ϊ ""��
  • ����Ͷ�����������Ϊ�����������ô���ᵼ�¾��棺Illegal offset type��

��������鶨���ж����Ԫ��ʹ����ͬһ����������ֻʹ�������һ����֮ǰ�Ķ��������ˡ�

Example #2 ����ǿ���븲��ʾ��

<?php
$array 
= array(
    
1    => "a",
    
"1"  => "b",
    
1.5  => "c",
    
true => "d",
);
var_dump($array);
?>

�������̻������

array(1) {
  [1]=>
  string(1) "d"
}

���������еļ�������ǿ��ת��Ϊ 1����ÿһ���µ�Ԫ���Ḳ��ǰһ����ֵ�����ʣ�µ�ֻ��һ�� "d"��

PHP �������ͬʱ���� integer �� string ���͵ļ�������Ϊ PHP ʵ�ʲ���������������͹������顣

����Ը�����ֵû��ָ����������ȡ��ǰ������������ֵ�����µļ������Ǹ�ֵ��һ�����ָ���ļ����Ѿ�����ֵ�����ֵ�ᱻ���ǡ�

Example #3 ��� integer �� string ����

<?php
$array 
= array(
    
"foo" => "bar",
    
"bar" => "foo",
    
100   => -100,
    -
100  => 100,
);
var_dump($array);
?>

�������̻������

array(4) {
  ["foo"]=>
  string(3) "bar"
  ["bar"]=>
  string(3) "foo"
  [100]=>
  int(-100)
  [-100]=>
  int(100)
}

key Ϊ��ѡ����δָ����PHP ���Զ�ʹ��֮ǰ�ù������ integer �������� 1 ��Ϊ�µļ�����

Example #4 û�м�������������

<?php
$array 
= array("foo""bar""hallo""world");
var_dump($array);
?>

�������̻������

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hallo"
  [3]=>
  string(5) "world"
}

������ֻ��ijЩ��Ԫָ���������������Ŀ��ã�

Example #5 ���Բ��ֵ�Ԫָ������

<?php
$array 
= array(
         
"a",
         
"b",
    
=> "c",
         
"d",
);
var_dump($array);
?>

�������̻������

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [6]=>
  string(1) "c"
  [7]=>
  string(1) "d"
}

���Կ������һ��ֵ "d" ���Զ������˼��� 7����������֮ǰ�������������� 6��

�÷������﷨�������鵥Ԫ

���鵥Ԫ����ͨ�� array[key] �﷨�����ʡ�

Example #6 �������鵥Ԫ

<?php
$array 
= array(
    
"foo" => "bar",
    
42    => 24,
    
"multi" => array(
         
"dimensional" => array(
             
"array" => "foo"
         
)
    )
);

var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

�������̻������

string(3) "bar"
int(24)
string(3) "foo"

Note:

�����źͻ����ſ��Ի���ʹ�����������鵥Ԫ������ $array[42] �� $array{42} ��������Ч����ͬ����

�� PHP 5.4 �������ֱ�ӶԺ����򷽷����õĽ��������������ã��ڴ�֮ǰֻ��ͨ��һ����ʱ������

�� PHP 5.5 �����ֱ�Ӷ�һ������ԭ�ͽ�����������á�

Example #7 ���������

<?php
function getArray() {
    return array(
123);
}

// on PHP 5.4
$secondElement getArray()[1];

// previously
$tmp getArray();
$secondElement $tmp[1];

// or
list(, $secondElement) = getArray();
?>

Note:

��ͼ����һ��δ������������������κ�δ�������һ�����ᵼ�� E_NOTICE ���������Ϣ������Ϊ NULL��

�÷����ŵ��﷨�½����޸�

����ͨ����ʾ���趨���е�ֵ���޸�һ���������顣

����ͨ���ڷ�������ָ�������������鸳ֵʵ�ֵġ�Ҳ����ʡ�Լ���������������¸�����������һ�Կյķ����ţ�[]����

$arr[key] = value;
$arr[] = value;
// key ������ integer �� string
// value �������������͵�ֵ

��� $arr �������ڣ������½�һ������Ҳ����һ���½�����ķ���������������������������Ϊ��� $arr �Ѿ�������ֵ������������������� string�����ֵ�ᱣ���� [] ʵ���ϴ������ַ����������������ʼ����������÷�ʽ��ֱ�Ӹ��丳ֵ����

Ҫ�޸�ij��ֵ��ͨ����������õ�Ԫ��һ����ֵ��Ҫɾ��ij��ֵ�ԣ�������� unset() ������

<?php
$arr 
= array(=> 112 => 2);

$arr[] = 56;    // This is the same as $arr[13] = 56;
                // at this point of the script

$arr["x"] = 42// This adds a new element to
                // the array with key "x"
                
unset($arr[5]); // This removes the element from the array

unset($arr);    // This deletes the whole array
?>

Note:

����������������������ŵ�û��ָ����������ȡ��ǰ�����������ֵ���µļ������Ǹ�ֵ���� 1��������СΪ 0���������ǰ��û�������������������Ϊ 0��

ע��������ʹ�õ��������������һ����ǰ���������С���ֻҪ���ϴ��������������������������ڹ������ˡ��������������˵����

<?php
// ����һ���򵥵�����
$array = array(12345);
print_r($array);

// ����ɾ�����е�����Ԫ�أ����������鱾����:
foreach ($array as $i => $value) {
    unset(
$array[$i]);
}
print_r($array);

// ���һ����Ԫ��ע���µļ����� 5���������������Ϊ�� 0��
$array[] = 6;
print_r($array);

// ����������
$array array_values($array);
$array[] = 7;
print_r($array);
?>

�������̻������

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

ʵ�ú���

�кܶ��������ĺ������μ����麯��һ�ڡ�

Note:

unset() ��������ɾ�������е�ij��������Ҫע�����齫�����ؽ������������Ҫɾ�����ؽ������������� array_values() ������

<?php
$a 
= array(=> 'one'=> 'two'=> 'three');
unset(
$a[2]);
/* will produce an array that would have been defined as
   $a = array(1 => 'one', 3 => 'three');
   and NOT
   $a = array(1 => 'one', 2 =>'three');
*/

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

foreach ���ƽṹ��ר����������ġ����ṩ��һ���򵥵ķ������������顣

������ʲô�Ͳ���ʲô

Ϊʲô $foo[bar] ���ˣ�

Ӧ��ʼ�������ַ�����ʾ�����������ϼ������š������� $foo['bar'] ������ $foo[bar]������Ϊʲô�أ��������ϵĽű��м��������﷨��

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

�����Ǵ�ģ��������������С���ôΪʲô�����أ�ԭ���Ǵ˴�������һ��δ����ij�����bar���������ַ�����'bar'��ע�����ţ����� PHP ���ܻ����Ժ���˳��������ҵ�����Ĵ�������ͬ�������֡��������У�����Ϊ PHP �Զ������ַ�����û�����ŵ��ַ����Ҳ���Ӧ���κ���֪���ţ�ת����һ����ֵΪ�����ַ����������ַ��������磬���û�г�������Ϊ bar��PHP ���������Ϊ 'bar' ��ʹ��֮��

Note: �Ⲣ����ζ�������������������š��ò��Ÿ�����Ϊ�����������ļ������ţ������ʹ PHP ���ܽ������ǡ�

<?php
error_reporting
(E_ALL);
ini_set('display_errors'true);
ini_set('html_errors'false);
// Simple array:
$array = array(12);
$count count($array);
for (
$i 0$i $count$i++) {
    echo 
"\nChecking $i: \n";
    echo 
"Bad: " $array['$i'] . "\n";
    echo 
"Good: " $array[$i] . "\n";
    echo 
"Bad: {$array['$i']}\n";
    echo 
"Good: {$array[$i]}\n";
}
?>

�������̻������

Checking 0: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 1
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 1

Checking 1: 
Notice: Undefined index:  $i in /path/to/script.html on line 9
Bad: 
Good: 2
Notice: Undefined index:  $i in /path/to/script.html on line 11
Bad: 
Good: 2

��ʾ����Ϊ�ĸ������ӣ�

<?php
// Show all errors
error_reporting(E_ALL);

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

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

// Incorrect.  This works but also throws a PHP error of level E_NOTICE because
// of an undefined constant named fruit
// 
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit];    // apple

// This defines a constant to demonstrate what's going on.  The value 'veggie'
// is assigned to a constant named fruit.
define('fruit''veggie');

// Notice the difference now
print $arr['fruit'];  // apple
print $arr[fruit];    // carrot

// The following is okay, as it's inside a string. Constants are not looked for
// within strings, so no E_NOTICE occurs here
print "Hello $arr[fruit]";      // Hello apple

// With one exception: braces surrounding arrays within strings allows constants
// to be interpreted
print "Hello {$arr[fruit]}";    // Hello carrot
print "Hello {$arr['fruit']}";  // Hello apple

// This will not work, and will result in a parse error, such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using superglobals in strings as well
print "Hello $arr['fruit']";
print 
"Hello $_GET['foo']";

// Concatenation is another option
print "Hello " $arr['fruit']; // Hello apple
?>

���� error_reporting ����ʾ E_NOTICE ����Ĵ��󣨽�����Ϊ E_ALL��ʱ��������Щ����Ĭ������� error_reporting ���رղ���ʾ��Щ��

�����﷨һ���й涨��һ�����ڷ����ţ�"["��"]"��֮�������һ�����ʽ������ζ�ſ�������д��

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

����һ���ú�������ֵ��Ϊ�������������ӡ�PHP Ҳ��������֪����������֮ǰ�Ѿ�������

<?php
$error_descriptions
[E_ERROR]   = "A fatal error has occured";
$error_descriptions[E_WARNING] = "PHP issued a warning";
$error_descriptions[E_NOTICE]  = "This is just an informal notice";
?>

ע�� E_ERROR Ҳ�Ǹ��Ϸ��ı�ʶ�����ͺ͵�һ�������е� bar һ����������һ������ʵ���Ϻ�����д����һ���ģ�

<?php
$error_descriptions
[1] = "A fatal error has occured";
$error_descriptions[2] = "PHP issued a warning";
$error_descriptions[8] = "This is just an informal notice";
?>

��Ϊ E_ERROR ���� 1���ȵȡ�

��ôΪʲô���������ã�

Ҳ����һ�죬PHP ����С����ܻ�������һ���������߹ؼ��֣������û�����ϣ���Ժ����Լ��ij����������µij������Ǿ����鷳�ˡ������Ѿ����������� empty �� default ���������ˣ���Ϊ��������������

Note: ����һ�Σ���˫�����ַ����У������������������ǺϷ������ "$foo[bar]" �ǺϷ��ģ�"�Ϸ�"��ԭ��Ϊ valid����ʵ�ʲ����У���ô��ȷʵ���Է�������ĸ�Ԫ�أ����ǻᱨһ������δ����� notice��������Σ�ǿ�ҽ��鲻Ҫʹ�� $foo[bar]������д������Ҫʹ�� $foo['bar'] ������������Ԫ�ء�--haohappy ע��������Ϊʲô�μ����ϵ����Ӻ��ַ����еı��������еĽ��͡�

ת��Ϊ����

�������� integer��float��string��boolean �� resource ���ͣ������һ��ֵת��Ϊ���飬���õ�һ������һ��Ԫ�ص����飬���±�Ϊ 0����Ԫ�ؼ�Ϊ�˱�����ֵ�����仰˵��(array)$scalarValue �� array($scalarValue) ��ȫһ����

���һ�� object ����ת��Ϊ array������Ϊһ�����飬�䵥ԪΪ�ö�������ԡ�������Ϊ��Ա�������������м������⣺�������Բ��ɷ��ʣ�˽�б���ǰ�����������ǰ׺����������ǰ�����һ�� '*' ��ǰ׺����Щǰ׺��ǰ�󶼸���һ�� NULL �ַ�����ᵼ��һЩ����Ԥ֪����Ϊ��

<?php

class {
    private 
$A// This will become '\0A\0A'
}

class 
extends {
    private 
$A// This will become '\0B\0A'
    
public $AA// This will become 'AA'
}

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

����������������Ϊ 'AA'����������һ��ʵ������ '\0A\0A'��

�� NULL ת��Ϊ array ��õ�һ���յ����顣

�Ƚ�

������ array_diff() ��������������Ƚ����顣

ʾ��

PHP �е����������зdz������;��������һЩʾ����

<?php
// This:
$a = array( 'color' => 'red',
            
'taste' => 'sweet',
            
'shape' => 'round',
            
'name'  => 'apple',
            
4        // key will be 0
          
);

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

// . . .is completely equivalent with this:
$a = array();
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']  = 'apple';
$a[]        = 4;        // key will be 0

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

// After the above code is executed, $a will be the array
// array('color' => 'red', 'taste' => 'sweet', 'shape' => 'round', 
// 'name' => 'apple', 0 => 4), and $b will be the array 
// array(0 => 'a', 1 => 'b', 2 => 'c'), or simply array('a', 'b', 'c').
?>

Example #8 ʹ�� array()

<?php
// Array as (property-)map
$map = array( 'version'    => 4,
              
'OS'         => 'Linux',
              
'lang'       => 'english',
              
'short_tags' => true
            
);
            
// strictly numerical keys
$array = array( 7,
                
8,
                
0,
                
156,
                -
10
              
);
// this is the same as array(0 => 7, 1 => 8, ...)

$switching = array(         10// key = 0
                    
5    =>  6,
                    
3    =>  7
                    
'a'  =>  4,
                            
11// key = 6 (maximum of integer-indices was 5)
                    
'8'  =>  2// key = 8 (integer!)
                    
'02' => 77// key = '02'
                    
0    => 12  // the value 10 will be overwritten by 12
                  
);
                  
// empty array
$empty = array();         
?>

Example #9 ����

<?php
$colors 
= array('red''blue''green''yellow');

foreach (
$colors as $color) {
    echo 
"Do you like $color?\n";
}

?>

�������̻������

Do you like red?
Do you like blue?
Do you like green?
Do you like yellow?

ֱ�Ӹı������ֵ�� PHP 5 �����ͨ�����ô�����������֮ǰ�İ汾��Ҫ��Ҫ��ȡ��ͨ�ķ�����

Example #10 ��ѭ���иı䵥Ԫ

<?php
// PHP 5
foreach ($colors as &$color) {
    
$color strtoupper($color);
}
unset(
$color); /* ensure that following writes to
$color will not modify the last array element */

// Workaround for older versions
foreach ($colors as $key => $color) {
    
$colors[$key] = strtoupper($color);
}

print_r($colors);
?>

�������̻������

Array
(
    [0] => RED
    [1] => BLUE
    [2] => GREEN
    [3] => YELLOW
)

��������һ���±�� 1 ��ʼ�����顣

Example #11 �±�� 1 ��ʼ������

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

�������̻������

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

Example #12 �������

<?php
// fill an array with all items from a directory
$handle opendir('.');
while (
false !== ($file readdir($handle))) {
    
$files[] = $file;
}
closedir($handle); 
?>

����������ġ�Ҳ����ʹ�ò�ͬ�����������ı�˳�򡣸�����Ϣ�μ����麯���������� count() ����������������Ԫ�صĸ�����

Example #13 ��������

<?php
sort
($files);
print_r($files);
?>

��Ϊ�����е�ֵ����Ϊ����ֵ��Ҳ������һ�����顣�������Բ����ݹ���ά���顣

Example #14 �ݹ�Ͷ�ά����

<?php
$fruits 
= array ( "fruits"  => array ( "a" => "orange",
                                       
"b" => "banana",
                                       
"c" => "apple"
                                     
),
                  
"numbers" => array ( 1,
                                       
2,
                                       
3,
                                       
4,
                                       
5,
                                       
6
                                     
),
                  
"holes"   => array (      "first",
                                       
=> "second",
                                            
"third"
                                     
)
                );

// Some examples to address values in the array above 
echo $fruits["holes"][5];    // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]);  // remove "first"

// Create a new multi-dimensional array
$juices["apple"]["green"] = "good"
?>

����(Array) �ĸ�ֵ���ǻ��漰��ֵ�Ŀ�����ʹ�����������ͨ���������������顣

<?php
$arr1 
= array(23);
$arr2 $arr1;
$arr2[] = 4// $arr2 is changed,
             // $arr1 is still array(2, 3)
             
$arr3 = &$arr1;
$arr3[] = 4// now $arr1 and $arr3 are the same
?>