<?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。 */






?>

  

 posted on 2013-12-19 08:30  萧治源  阅读(67)  评论(0)    收藏  举报