1、基本内容
range(low,high,[step]);函数
,创建一个包含指定范围的元素的数组。
参数step:可选。规定元素之间的步进制。默认是 1。
如:range(0,10,2);
输出以2递增,到10结束的数组。
- 循环输出数组内容
$price['a'] = 100;
$price['b'] = 10;
$price['c'] = 4;
1-foreach()方法
foreach ($price as $key=>$value){
echo $key." - ".$value."<br />";
}
2-each()方法
while($element = each($price)){
echo $element['key'];
echo " -- ";
echo $element['value'];
echo "<br />";
}
3-list()方法
reset($price);
使用each()函数时,数组将记录当前元素,若要在相同的脚本中
多次使用该数组,应重置数组的指针到开始处
while(list($product,$pric) = each($price)){
echo $product." - - ".$pric."<br />";
}
list()可以重命名数组的key和value值,该函数只使用于数字索引的数组,且默认从0开始
- 二维数组
$products = array(
array('Code' => 'TIR',
'Desc' => 'Tires',
'Price' => 100
),
array('Code' => 'OIL',
'Desc' => 'Oil',
'Price' => 10
),
array('Code' => 'SPK',
'Desc' => 'Spark Plugs',
'Price' => 4
),
);
for($row=0; $row<3; $row++){
while(list($key, $value) = each($products[$row])){
echo " |$value";
}
echo " |<br />";
}
输出:
|TIR |Tires |100 |
|OIL |Oil |10 |
|SPK |Spark Plugs |4 |
- 数组排序(一维数组和多维数组)
- 一维数组的一些排序函数
1、适用于无关联的数组,如一维数字索引数组
$arr = array('Tir','Oil' ,'Spk' ,);
sort(arr,[sortingtype]); 函数对索引数组进行升序排序
如果成功则返回 TRUE,否则返回 FALSE
参数sortingtype:可选。规定如何比较数组的元素/项目
0 = SORT_REGULAR - 默认。把每一项按常规顺序排列
1 = SORT_NUMERIC - 把每一项作为数字来处理
2 = SORT_STRING - 把每一项作为字符串来处理。
2、适用于关联数组的排序如一维关联数组
$arr = array('Tir' => 100,'Oil' => 10,'Spk' => 4,);
asort();ksort();
若用关联数组存储各个项目和它们的价格,
就需要用不同的排序函数使关键字和值在排序时仍然保持一致。
asort();将数组的value值升序排序
ksort();将数组的key值升序排序
3、反向排序
对应于 sort(),asort(),ksort(),反向排序函数依次为
rsort(),arsort(),krsort(),使数组降序排序。
-
多维数组排序
usort()
usort();用例:
$products = array(
array('Code' => 'TIR',
'Desc' => 'Tires',
'Price' => 100
),
array('Code' => 'OIL',
'Desc' => 'Oil',
'Price' => 10
),
array('Code' => 'SPK',
'Desc' => 'Spark Plugs',
'Price' => 4
),
);
usort($products, "usortRank");
function usortRank($a,$b){
$a1 = $a['Price'];
$b1 = $b['Price'];
if($a1 == $b1){
return 0;
}
return ($a1>$b1 ? 1:-1);
}
print_r($products);
类似于asort()和ksort()
对应有uasort()和uksort()
- 对数组进行重新排序
shuffle()
函数将数组次序随机打乱;
array_reverse()
给出一个原数组的反向排序
array_push()
函数将每个新元素添加到数组的末尾
array_pop()
函数删除并返回数组末尾的一个元素 -
explode()函数
:将字符串打散为数组
explode(separator,string,limit);
*separator*必需。规定在哪里分割字符串。
*string*必需。要分割的字符串。
*limit*可选。规定所返回的数组元素的数目。
可能的值:
大于 0 - 返回包含最多 *limit* 个元素的数组
小于 0 - 返回包含除了最后的 -*limit* 个元素以外的所有元素的数组
0 - 返回包含一个元素的数组
如:
$str = 'one,two,three,four';
print_r(explode(',',$str));输出结果为:Array ( [0] => one [1] => two [2] => three [3] => four)
print_r(explode(',',$str,0));输出结果为:Array ( [0] => one,two,three,four )
print_r(explode(',',$str,2));输出结果为:Array ( [0] => one [1] => two,three,four )
print_r(explode(',',$str,-1));//返回不包含最后一个元素的数组
即 Array ( [0] => one [1] => two [2] => three )
- 数组中浏览
each() 函数返回当前元素的键名和键值,并将内部指针向前移动
current() - 返回数组中的当前元素的值
end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() - 将内部指针指向数组中的第一个元素,并输出
--
$arrTest = range(1, 10);
print_r(each($arrTest));
//Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 )
--2
$people = array("Bill", "Steve", "Mark", "David");
reset($people);
while (list($key, $val) = each($people)){
echo "$key => $val<br>";
}
--例子
<?php
$people = array("Bill", "Steve", "Mark", "David");
echo current($people) . "<br>"; // 当前元素是 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
echo current($people) . "<br>"; // 现在当前元素是 Steve
echo prev($people) . "<br>"; // Steve 的上一个元素是 Bill
echo end($people) . "<br>"; // 最后一个元素是 David
echo prev($people) . "<br>"; // David 之前的元素是 Mark
echo current($people) . "<br>"; // 目前的当前元素是 Mark
echo reset($people) . "<br>"; // 把内部指针移动到数组的首个元素,即 Bill
echo next($people) . "<br>"; // Bill 的下一个元素是 Steve
print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针
?>
-
array_walk($arr, $func, [userdata...])
对数组中的元素运用自定义函数,在函数中,数组的键名和键值是参数
$arrTest = range(1, 10);
function my_print(&$value,$key,$factor){
echo $value *= $factor;
echo "<br />";
}
array_walk($arrTest, 'my_print', 3);
echo "<hr/>";
print_r($arrTest);
这里的&符号是引用传值,将数组的每个元素的值都乘以3。
-
extract($arr, $extract_rules, $prefix)
该函数对数组键名作为变量名,使用数组键值作为变量值
*array*
必需。规定要使用的数组。
*extract_rules*
可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
可能的值:
EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 *prefix*。
EXTR_PREFIX_ALL - 给所有变量名加上前缀 *prefix*。
EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 *prefix*。
EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。
-
*prefix*
可选。请注意 *prefix* 仅在 *extract_type* 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。
前缀和数组键名之间会自动加上一个下划线
1-
$arr = array('k1'=>'v1','k2'=>'v2','k3'=>'v3');
extract($arr);
echo $k1;//输出v1
2-
$k1 = 'bv';
$arr = array('k1'=>'v1', 'k2'=>'v2', 'k3'=>'v3');
extract($arr, EXTR_PREFIX_SAME, 'same');
echo "$k1 , $k2 , $k3 , $same_k1";
//输出 bv , v2 , v3 , v1