<?php
//自动建立数字数组1-10.
//renge第三个参数是步幅。
$arr=range(1,10,2);
echo "<pre>";
print_r($arr);
echo "</pre>";
echo '<hr/>';
//使用索引数组循环输出值
$arr2[]='hello';
$arr2[]='PHP';
$arr2[]='test';
foreach($arr2 as $v){
echo $v.'<br/>';
}
echo '<hr/>';
//关联数组的循环输出使用foreach
$arr3=array('name'=>'xzy','age'=>23,'sex'=>'1');
foreach($arr3 as $k => $v){
echo $k.'---'.$v.'<br/>';
}
echo '<hr/>';
/*使用eacg函数配合while循环输出,注意这里使用了命名位置
4个,【key和0,value和1】*/
$arr4=array('LJJ'=>525242,'HDP'=>520);
while($v = each($arr4)){
echo $v[key];
echo '---';
echo $v[value];
echo '<br/>';
}
echo '<hr/>';
/*each取出当前元素并指向一下个元素,使用list从each返回
的0和1二个元素变成名为$rk,$rv新变量。reset()函数将数组指向开始处*/
$arr5=array('one'=>1,'two'=>2,'three'=>3);
while(list($rk,$rv) = each($arr5)){
echo "$rk -- $rv <br/>";
}
echo '<hr/>';
/*
数组中的操作符
+ 联合 $a+$b 数组$b将附加到$a中,如关键字冲突不会被添加
== 等价 $a==$b 如果$a和$b相同元素,返回TRUE
==== 恒等 $a===$b 如果$a和$b相同顺序和类型的元素,返回TRUE
!= 不等价 $a!=$b 如果$a和$b不相同元素,返回TRUE
<> 不等价 同上(!=)
!== 不恒等 $a!==$b 如果$a和$b不相同顺序类型的元素,返回TRUE
*/
//循环出二维数组,使用双重for循环实现
$arr6=array(array('SX','5300I',2500),
array('SN','6000Y',6000),
array('MT','9000D',8000)
);
for($row=0;$row<3;$row++){
for($row2=0;$row2<3;$row2++){
echo '|' . $arr6[$row][$row2];
}
echo '|' . '<br/>';
}
echo '---------------------------------<br/>';
//这里使用有有意义的行和列的名称作为索引(描述性索引)
$arr6=array(array('paizi'=>'SX',
'xinghao'=>'5300I',
'jiage'=>2500
),
array(
'paizi'=>'SN',
'xinghao'=>'6000Y',
'jiage'=>6000
),
array(
'paizi'=>'MT',
'xinghao'=>'9000D',
'jiage'=>8000
)
);
//使用for循环出二维数组,检索某个值
for($rows=0;$rows<3;$rows++){
echo $arr6[$rows]['paizi'] .'|'.
$arr6[$rows]['xinghao'].'|'.
$arr6[$rows]['jiage'] .'|'. '<br/>';
}
echo '---------------------------------<br/>';
/*三维数组具有高、宽、深的概念,如果轻松地将一个二维数组想象成一个
有行和列的表格,每个元素通过层、行和列进行引用。*/
$arr7=array(array(array('TB','TD1',120),
array('RB','RB2',250),
),
array(array('TB2','TD1',120),
array('RB2','RB2',250),
),
array(array('TB3','TD1',120),
array('RB3','RB2',250),
),
);
for($layer=0;$layer<3;$layer++){
echo "Layer $layer <br/>";
for($row7=0;$row7<3;$row7++){
for($doc=0;$doc<3;$doc++){
echo '|'. $arr7[$layer][$row7][$doc];
}
echo '| <br/>';
}
}
echo '---------------------------------<br/>';
/*sort()函数升序排序,区分大小写A小于Z,而Z小于a,第二个参数可选
可以传递SORT_REGULAR(默认值)SORT_NUMERIC或SORT_STRING指定类型
功能非常有用。字符串角度看12小于2,数字角度看2小于12。*/
$fruits = array ("lemon", "orange", "banana", "apple");
sort ($fruits);
reset ($fruits);
while (list ($key, $val) = each ($fruits)) {
echo "fruits[".$key."] = ".$val."<br/>";
}
echo '---------------------------------<br/>';
/*asort()函数对key进行反序排序,而ksort()函数按照
key正序排序。注意键名和数据是关联的*/
$arr8=array('orange'=>20,'banana'=>10,'apple'=>50);
asort($arr8);//可以改ksort()函数进行排序
reset($arr8);
while(list($key,$value) = each ($arr8)){
echo $key .'-->'.$value.'<br/>';
}
echo '---------------------------------<br/>';
/*比较函数必须在第一个参数被认为小于,等于或大于
第二个参数时分别返回一个小于,等于或大于零的整数。*/
function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$a = array ('a'=>5,'v'=>20,'r'=>5,'c'=>6,'z'=>1);
usort ($a, "cmp");
while (list ($key, $value) = each ($a)) {
echo "$key : $value <br/>";
}
echo '---------------------------------<br/>';
/*array_reverse() 接受数组 array 作为输入并返回一个单元
为相反顺序的新数组,如果 preserve_keys 为 TRUE 则保留
原来的键名。$result 和 $result_keyed 具有相同的单元,
但是注意键名的区别。*/
$input = array ("php", 4.0, array ("green", "red"));
$result = array_reverse ($input);
$result_keyed = array_reverse ($input, TRUE);
echo "<pre>";
print_r($result_keyed);
echo '---------------------------------<br/>';
/*shuffle()函数打乱(随机排列单元的顺序)一个数组。必须用
srand() 播下本函数的随机数发生器种子。*/
/*$numbers = range (1,20);
srand ((float)microtime()*1000000);
shuffle ($numbers);
while (list (, $number) = each ($numbers)) {
echo "$number ";
}*/
echo '---------------------------------<br/>';
/*current(array) 函数返回当前被内部指针指向的数组
单元的值,并不移动指针。
prev(array)将数组的内部指针倒回一位。
next(array)将数组中的内部指针向前移动一位。
pos(array)得到数组当前的单元,本函数是 current() 的别名。
end(array)将数组的内部指针指向最后一个单元。
each(array)返回数组中当前的键/值对并将数组指针向前移动一步。
reset(array)将数组的内部指针指向第一个单元。*/
/*array_walk()对数组中的每个成员应用用户函数。
bool array_walk ( array array, callback function [, mixed userdata])*/
$fruits = array ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
/*这里第一个参数是值,第二个是关键字,第三个是参数。
下句使用地址符(&)表示允许函数修改数组的内容。*/
function test_alter (&$item1, $key, $prefix) {
$item1 = "$prefix: $item1";
}
function test_print ($item2, $key) {
echo "$key. $item2<br>\n";
}
echo "Before ...:<br/>";
array_walk ($fruits, 'test_print');
array_walk ($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk ($fruits, 'test_print');
/*统计数组:
count(array)统计变量中的单元数目,别名sizeof() 。
array_count_values(array)统计数组中所有的值出现的次数。*/
/*extract()函数将数组转换成标量变量,将关键字创建为变量名称,
这个变量的值也来自数组。关键字有效的变量名称。
参数是:传入数组、处理冲突、变量前缀。*/
$size = "large";
$var_array = array ("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract ($var_array, EXTR_PREFIX_SAME, "wddx");
print "$color, $size, $shape, $wddx_size <br/>";
/*EXTR_OVERWRITE
如果有冲突,覆盖已有的变量。
EXTR_SKIP
如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME
如果有冲突,在变量名前加上前缀 prefix。
EXTR_PREFIX_ALL
给所有变量名加上前缀 prefix。自 PHP 4.0.5 起这也包括了对数字索引的处理。
EXTR_PREFIX_INVALID
仅在非法/数字的变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。
EXTR_IF_EXISTS
仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。可以用在
已经定义了一组合法的变量,然后要从一个数组例如 $_REQUEST 中提取值覆盖
这些变量的场合。本标记是 PHP 4.2.0 新加的。
EXTR_PREFIX_IF_EXISTS
仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理
。本标记是 PHP 4.2.0 新加的。
EXTR_REFS
将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数
的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志
结合使用。本标记是 PHP 4.3.0 新加的。
如果没有指定 extract_type,则被假定为 EXTR_OVERWRITE。 */
?>