简介
PHP支持8种基本的数据类型
四种标量类型:
boolen
integer
float(double)
string
两种复合类型:
array
object(对象)
最后是两种特殊类型:
resource(资源)
NULL(NULL)
还有其他的伪类型:
mixed
number
callback
以及伪变量$...
Note:如果想查看某个表达式的值和类型,用 var_dump().
如果只是想得到一个易读懂的类型的表达方式用于调试,用gettype().要判断某个类型,不要用gettype(),而用is_type函数.
<?php
$a_bool =TRUE;//bool
$a_str1="foo";//string
$a_str2="foo";//string
$a_int=12;//integer
echo gettype($a_bool);//prints out:boolean//注意 不要写成a_bool,前面要加上$
echo gettype($a_int);//prints out:integer//注意 不要写成a_bool,前面要加上$
/*
If this is an integer,increment it by four
*/
if(is_int($a_int))
{
$a_int+=4;
echo $a_int;
}
//if $a_bool is a string,print it out
if(is_string($a_bool))
{
echo "String:$a_bool";
}
?>
如果要将一个变量强制转换为某类型,可以对其使用强制转换或者settype()函数.
布尔类型
语法
要制定一个布尔值,使用关键字TRUE或FALSE.这两个不区分大小写.
<?php
$foo=True;//assign the value TRUE to $ foo
?>
通常需要用某些运算符返回boolean值,并将其传递给控制流程.
<?php
$action="show_version";
//==是一个操作符,它检测两个变量是否相等,并返回一个布尔值
if($action=="show_version"){
echo "The version is 1.23";
}
//这样做是不必要的...
if($show_separators==TRUE){
echo "<hr>\n";
}
//...因为可以使用下面这种简单的方式
if($show_separators){
echo "<hr>\n";
}
?>
小练习:
<?php
var_dump((bool) "");//false
var_dump((bool) 1);//true
var_dump((bool) -2);//true
var_dump((bool) "foo");//true
var_dump((bool) 2.3e5);//true
var_dump((bool) array(12));//true
var_dump((bool) array());//false
var_dump((bool) "false"); //true
?>
整型
一个integer是集合Z={...,-2,-1,0,1,2,...}中的一个数
Example #1整数文字表达
<?php
$a=1234;
$a=-1234;
$a=0123;//八进制数(等于十进制83)
$a=0x1A;//十六进制数(等于十进制26)
?>
Example #2八进制数的怪事
<?php
var_dump(01090);//八进制010=十进制8
?>
解释:如果向八进制数传递了一个非法数字(即8或9),则后面其余数字会被忽略.
字符串
一个字符串通过下面的4种方法来定义:
单引号
双引号
heredoc语法结构
nowdoc语法结构(自PHP 5.3.0以后)
定义一个字符串 的最简单的方法是用单引号把它包围起来 (标点符号 ')。
如果想要输出一个单引号,需在它的前面加个反斜线 (\)。在单引号前或在字符串的结尾处 想要输出反斜线,输入两条 (\\)。注意,如果在任何其它的字符前加了反斜线,反斜线将会被直接输出。
<?php
echo 'this is a simple string';
// 可以录入多行
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
// 输出: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';
// 输出: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
// 输出: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
// 输出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';
// 输出: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>
Heredoc结构
第三种定义字符串的方法是用heredoc句法结构:<<<。在该提示 符后面,要定义个标识符,然后是一个新行。接下来是字符串 本身,最后要用前面定义的标识符作为结束标志。
结束时所引用的标识符必须在一行的开始位置, 而且,标识符的命名也要像其它标签一样遵守PHP的规则:只能包含 字母、数字和下划线,并且不能用数字和下划线作为开头。
要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括 其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或tabs。更重要的是结束标识符的前面必须是个被本地 操作系统认可的新行标签,比如在UNIX和Mac OS X系统中是\n ,而结束标识符(可能有个分号)的后面也必须跟个 新行标签。
如果不遵守该规则导致结束标签不“干净”,PHP将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP将会在最后一 行产生一个句法错误。
Heredocs结构不能用来初始化class,而从PHP 5.3以后,则该限制只能用在包含变量的情况下。
Example #1 非法的示例
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
?>
Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换,但是上文中列出的字符 (\n等)也可使用。 变量将被替换,但在heredoc结构中字符串表达复杂变量时,要格外小 心。
Example #2 Heredoc结构的字符串示例
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
/* 含有变量的更复杂示例 */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
http://i.cnblogs.com/EditPosts.aspx?postid=5145397
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
以上会输出:
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
Note:
Example #7表态数据的示例
<?php
class foo {
public $bar = <<<'EOT'
bar
EOT;
}
?>
$beer='Heineken';
echo "$beer's taste is great";//valid,单引号" ' "是非法的变量名组成元素
echo "He drank some $beers";//invalid.字母s是有效的变量名组成元素,但是这里的变量是$beer
echo "He drank some ${beer}s";//valid
echo "He drank some {$beer}s";//valid
?>
<?php
// 下面的例子是在字符串中引用数组
// 当数组处于字符串外部时,要把数组的值用括号括起来且不要用花括号{ }
// 显示所有错误
error_reporting(E_ALL);
$fruits = array('strawberry' => 'red', 'banana' => 'yellow');
// 有效;但是注意在字符串外面不能这样引用数组
echo "A banana is $fruits[banana].";
// 有效
echo "A banana is {$fruits['banana']}.";
// 有效,但是PHP会先寻找常量banana
echo "A banana is {$fruits[banana]}.";
// 无效,要用花括号,这里将会产生一个解析错误
echo "A banana is $fruits['banana'].";
// 有效
echo "A banana is " . $fruits['banana'] . ".";
// 有效
echo "This square is $square->width meters broad.";
// 无效,解决方法见复杂结构
echo "This square is $square->width00 centimeters broad.";
?>
如果想要表达更复杂的结构,请用复杂句法规则.
复杂句法规则
复杂句法规则不是结构复杂而命名,而是因它可以使用复杂的表达式.
任何想用在字符串中标量变量,数组变量或者对象属性都可以使用这种方法.只需简单地像在
字符串以外的地方那样写出表达式,然后用花括号{}把它括起来.由于{}无法被转义,只有$要
紧挨着才会被认出来,可以用{\$来表达{$.
<?php
$beer = 'Heineken';
echo "$beer's taste is great"; //有效;单引号"'"是非法的变量名组成元素
echo "He drank some $beers"; //无效;字母s是有效的变量名组成元素,但是这里的变量是$beer
echo "He drank some ${beer}s"; // 有效
echo "He drank some {$beer}s"; // 有效
?>
类似的,一个 数组 索引或一个 对象 属性也可被解析。数组索引要用方括号 (]) 来表示边际, 对象属性则是和上述的变量规则相同。
<?php
// 下面的例子是在字符串中引用数组
// 当数组处于字符串外部时,要把数组的值用括号括起来且不要用花括号{ }
// 显示所有错误
error_reporting(E_ALL);
$fruits = array('strawberry' => 'red', 'banana' => 'yellow');
// 有效;但是注意在字符串外面不能这样引用数组
echo "A banana is $fruits[banana].";
// 有效
echo "A banana is {$fruits['banana']}.";
// 有效,但是PHP会先寻找常量banana
echo "A banana is {$fruits[banana]}.";
// 无效,要用花括号,这里将会产生一个解析错误
echo "A banana is $fruits['banana'].";
// 有效
echo "A banana is " . $fruits['banana'] . ".";
// 有效
echo "This square is $square->width meters broad.";
// 无效,解决方法见复杂结构
echo "This square is $square->width00 centimeters broad.";
?>
如果想要表达更复杂的结构,请用复杂句法规则。
复杂句法规则
复杂句法规则不是结构复杂而命名,而是因为它可以使用复杂的表达式。
任何想用在字符串中标量变量,数组变量或对象属性都可使用这种方法。 只需简单地像在字符串以外的地方那样写出表达式, 然后用花括号{和 }把它括起来。 由于 { 无法被转义,只有 $ 要紧挨着 {才会被认出来,可以用 {\$ 来表达 {$。下面的示例可以更好的解释:
<?php
// 显示所有错误
error_reporting(E_ALL);
$great = 'fantastic';
// 无效,输出: This is { fantastic}
echo "This is { $great}";
// 有效,输出: This is fantastic
echo "This is {$great}";
echo "This is ${great}";
// 有效
echo "This square is {$square->width}00 centimeters broad.";
// 有效
echo "This works: {$arr[4][3]}";
// 这是错误的表达式,因为就象$foo[bar] 的格式不能在字符串以外的地方使用一样。
// 换句话说,只有在PHP能找到常量foo 的前提下才会正常工作;这里会产生一个E_NOTICE (undefined constant)级别的错误。
echo "This is wrong: {$arr[foo][3]}";
// 有效,当在字符串中使用多重数组时,一定要用括号将它括起来
echo "This works: {$arr['foo'][3]}";
// 有效
echo "This works: " . $arr['foo'][3];
echo "This works too: {$obj->values[3]->name}";
echo "This is the value of the var named $name: {${$name}}";
echo "This is the value of the var named by the return value of getName():
{${getName()}}";
echo "This is the value of the var named by the return value of
\$object->getName(): {${$object->getName()}}";
// 无效,输出: This is the return value of getName(): {getName()}
echo "This is the return value of getName(): {getName()}";
?>
也可以在字符串中用变量来调用类的属性。
<?php
class foo {
var $bar = 'I am bar.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo "{$foo->$bar}\n";
echo "{$foo->$baz[1]}\n";
?>
以上例程会输出:
I am bar.
I am bar.
Note:
函数、行为、类的静态变量和类的常量只有在PHP 5以后才可在 {$} 中使用。然而,只有在用返回的值作为名 称的变量存在的情况下才会进行处理,只单一使用花括号 ({}) 无法处理从函数或行为的返回值或从类的常量或静态变量的返 回值。
<?php
//显示所有的错误
error_reporting(E_ALL);
class beers{
const softdrink='rootbeer';
public static $ale='ipa';
}
$rootbeer=' A & W ';
$ipa='Alexander Keith\s';
//有效,输出:I'd like an A&W
echo "I'd like an {${beers::softdrink}}\n";
//也有效,输出:I'd like an {${beers;$ale}}\n";
echo "I'd like an {${beers::$ale}}\n";
?>
存取和修改字符串中的字符
字符串中的字符可以通过一个以0为开始的,用类似数组结构中的方括号对应的数字来查找和修改,比如$str[42,]可以把字符串相像数组.函数substr()和substr_replace()可以用来实现多于一个字符的情况.
Note:字符串为了同样的目的也可以用花括号,比如$str{42},但是,在PHP5.3.2中不推荐使用这种格式,应该用方括号,就像$str[42].
Warning
方括号中的数字超出范围将会产生空白.非整数类型被转换成整数,非整数类型转变成整数,非法类型会产生一个E_NOTICE级别错误,负数在写入时会产生一个E_NOTICE,但读取的是字符串。被指定的字符串只有第一个字符可用,空字符串用指定为空字节。
Example #8Some string examples
<?php
//取得字符串的第一个字符
$str='This is a test.';
$first=$str[0];
//取得字符串的第三个字符
$str="This is still a test.";
$last=$str[strlen($str)-1];
//修改字符串的最后一个字符
$str='Look at the sea'
$str[strlen($str)-1]='e';
?>
Note:用[]或{}存取其它类型的变量只会返回NULL.
有用的函数和操作符
字符串可以用'.'(点)操作符连接起来,注意'+'(加号)操作符没有这个功能.
可以参考字符串函数了解大部分函数,高级的查找&替换功能可以参考正册表达式函数或perl类型的正册表达式函数.
另外还有URL字符串的函数,也有加密/解密字符串的函数.(mcrypt和mhash).
最后,可以参考字符类型函数.
转换成字符串
一个值可以通过在其前面加上(string)或用strval()函数来转变字符串.在一个需要字符串的表达式中,
字符串会自动转变,比如在使用函数echo和print时,或在一个变量和一个字符串进行比较时,就会发生这种
转变类型和类型转换可以更好的解释下面事件,也可参考函数settype().
一个boolean TRUE值被转换成字符串"1".Boolean FALSE被转换成""(空的字符串).这种转变可以在boolean和字符串之间往返进行.
一个整数或浮点数被转变数字的字面样式的字符串(包括浮点中的指数部分),使用指数计数法的浮点数(4.1E+6)也可转变.
Note
在脚本场所(category LC_NUMERIC)定义了小数点,更多可以参考函数setlocale().
数组转换成字符串"Array",因此,echo和print无法显示出该数组的值.如果显示一个数组值,可以用echo $arr['foo']这种结构,更多内容见下文.
在PHP 4对象被转换成字符串"Object",果为了调试原因需要打印出对象的值,方法见正文.为了得到对象的类的名称,可以用get_class()函数.
在PHP 5中,可以用_toString.资源总会被变成"Resource id #1"这种结构的字符串,其中的1是PHP分配给该资源的独特数字.不用过多关注这种
结构,它马上要转变了.为了得到一个resource类型,可以用函数get_resource_type().
NULL总是被转变成空的字符串.
如上面所说的,直接把数组,对象或资源转换成字符串 不会得到超出其自身的更多心信息。可以使用函数print_r()和var_dump()列出这些类型的内容.
大部分的PHP值可以转变成字符串S来长期存储,这被称作串行化,可以用函数serialize()来实现.如果PHP引擎设定支持WDDX,PHP值也可存储成XML格式.
字符串转变成数字
当一个字符串被用在了一个数字的环境中,结构和类型如下:
如果字符串没有包括'.','e'或'E'并且数字值符合整数类型的限定(PHP_INT_MAX定义的),这个字符串可被定义为一个integer,在其他情况下被认定为一个float.
字符串的开始部分给定了它的值,如果字符串的开始部分给定了它的值,如果字符串以合法的数字开始,这个数字可直接使用.否则,值就是0(零).合法数组由符号,后面跟着一个或多个数字(可能有个数点),再跟着可选的指数符号如'e'或'E',后面跟着一个或多个数字。
<?php
$foo=1+"10.5";//$foo is float
$foo=1+"-1.3e3";//
$foo=1+"bob-1.3e3";//
$foo=1+"bob3";
$foo=1+"10.2 Small Pigs";
$foo=4+"10.2 Little Piggies";
$foo="10.0 pigs"+1;
$foo="10.0 pigs"+1.0;
?>
更多信息可以参考Unix手册中的strtod(3).
本节中的示例可以通过复制/粘贴到下面的代码中来显示:
<?php
echo "\$foo==$foo; type is " . gettype ($foo) . "<br />\n";
?>
数组
PHP中的数组实际上是一个有序映射.映射是一种把values关联到keys的类型.此类型在很多方面做了优化,
因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性.
数组元素的值也可以是另一个数组.树形结构和多维数组也是允许的.
解释这些结构超出了这本手册的范围,但对于每种结构至少会提柜一个例子.要得到这些结构的更多信息,建议参考有关此广阔主题的其他著作.
语法
定义数组array()
可以用array()语言结构来新建一个array.它接受任意数量用逗号分隔的键(key)=>值(value)对.
array(key=>value
,...
)
//键(key)可以是一个整数(integer)或字符串(string)
//值(value)可以是任意类型的值
<?php
$arr=array("foo"=>"bar",12=>true);
echo $arr["foo"];//bar
echo $arr[12];//1
?>
key可以是integer或者string.如果key是一个integer的标准表示,如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。
<?php
// 这个数组与下面的数组相同 ...
array(5 => 43, 32, 56, "b" => 12);
// ...
array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
?>
自 PHP 4.3.0 起,上述的索引生成方法改变了。如今如果给一个当前最大键名是负值的数组添加一个新值,则新生成的的索引将为零(0)。以前新生成的索引为当前最大索引加一,和正值的索引相同。
使用 TRUE
作为键名将使 integer 1 成为键名。使用 FALSE
作为键名将使 integer 0 成为键名。使用 NULL 作为键名将等同于使用空字符串。使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样。
不能用数组和对象作为键(key)。这样做会导致一个警告:Illegal offset type。
用方括号的语法新建/修改
可以通过明示地设定值来改变一个现有的数组。
这是通过在方括号内指定键名来给数组赋值实现的。也可以省略键名,在这种情况下给变量名加上一对空的方括号(“[]”)。
$arr[key] = value; $arr[] = value; // key 可以是 integer 或 string // value 可以是任意类型的值
如果 $arr 还不存在,将会新建一个。这也是一种定义数组的替换方法。要改变一个值,只要给它赋一个新值。如果要删除一个键名/值对,要对它用 unset()。
<?php
$arr = array(5 => 1, 12 => 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。如果指定的键名已经有值了,该值将被覆盖。
注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:
<?php
//创建一个数组
$array=array(1,2,3,4,5);
print_r($array);//输出:Array([0]=>1,[1]=>2,[2]=>3,[3]=>4,[4]=>5)
//现在删除其中的所有元素,但保持数组本身不变
foreach($array as $i=>$value)
{
unset($array[$i]);
}
print_r($array);//输出:Array()
//添加一个单元(注意新的键名是5,而不是你可能以为的0)
$array[]=6;
print_r($array);//输出Array([5]=>6)
//重新索引:
$array=array_values($array);
$array[]=7;
print_r($array);//输出:Array([0]=>1,[1]=7)
?>
实用函数
有很多操作数组的函数
Note:
unset()函数允许删除数组中的某个键。但要注意数组将不会被重建索引。
<?php
$a=array(1=>'one',2=>'two',3=>'three');
unset($a[2]);//will produce an array that would have been defined as
//$a=array(1=>'one',2=>'two',3=>'three');
//and NOT
//$a=array(1=>'one',)
$b=array_values($a);
?>
foreach控制结构是专门用于数组的.它提供了一个简单的方法来遍历数组.数组做什么和不做什么?
为什么$foo[bar]错了?
应该始终在用字符串表示的数组索引加上引号。例如用$foo['bar']而不是$foo[bar]。但是为什么$foo[bar]错了呢?
<?php
$foo[bar]='enemy';
echo $foo[bar];
//etc
?>
这样是错的,但是可以正常运行.那么为什么错了呢?原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而PHP
可能会在以后定义此常量,不幸的是你的代码中有同样的名字.它能运行,是因为PHP自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成
一个值为该裸字符串的正常字符串.例如,如果没有常量定义此常量,PHP将把它替代为‘bar’并使用之。
Note:这并不意味着总是给键名加上引号,用不着给键名为常量或变量的加上引号,否则会使PHP不能解析它们。
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
ini_set('html_errors',false);
//Simple array:
$array=array(1,2);
$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:Underfined index:$i in/path/to/script.html on line 9
Bad:
Good:1
Notice:Underfined index:$i in/path/to/script.html on line11
Bad:
Good:1
Checking 1:
Notice:Underfined index:$i in/path/to/script.html on line 9
Bad:
Good:2
Notice:Underfined 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.
print $arr['fruit'];
print $arr['veggie'];
//Incorrect
print $arr[fruit];
print $arr[fruit];
//
print "Hello $arr{[fruit]}";
//
print "Hello {$arr[fruit]}";
print "Hello {$arr['fruit']}";
//
print “Hello $arr['fruit']“;
print "Hello $_GET['fruit']";
//
print "Hello".$arr['fruit'];
?>
当打开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[3]="This is just an informal notice";
?>
因为E_ERROR等于1,等等.
那么为什么这样做不好?
也许有一天,PHP开发小组可能会想新增一个常量或者关键字,或者用户
可能希望以后在自己的程序中引入新的常量,那就有麻烦了.例如已经不能这样用empty和default这两个词了,因为他们是保留字.
Note:重申一次,在双引号字符串中,不给索引加上引号是合法的.因此"$foo[bar]"是合法("合法"的原文为valid.在实际测试中,这么做确实
可以访问数组的元素,但是会报一个常量未定义的notice。无论如何,强烈建议不要使用$foo[bar]这样的写法,而要使用$foo['bar']来
访问数组中元素.)至于为什么参见以上的例子和字符串中的变量解析中的解释.
转换为数组
对于任意类型:integer,float,string,boolean&resource,如果将一个值转换为数组,将得到一个仅有一个元素的数组(其下标为0),该元素
即为此标量的值.换句话说,(array)$scalarValue与array($scalarValue)完全一样.
<?php
class A{
private $A;
}
class B extends A{
private $A;
public $AA;
}
var_dump((array) new B());
?>
The above will appear to have two keys named 'AA',although one of them is actually named '\0A\0A'.
将NULL转换到数组(array)会得到一个空的数组.
比较
可能使用array_diff()和数组运算符来比较数组.
Examples
PHP中的数组类型有非常多的用途,因此这里有一些例子展示数组的完整威力.
<?php//This:
$a=array('color'=>'red',
'taste'=>'sweet',
'shape'=>'round',
'name'=>'apple',
4);
$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;
$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 #1 Using array()