数组是数据值的集合,按有序的“key-value”对应关系来阻止。 本章将学习如何创建,增加和删除数组元素,以及遍历数组内容。因为数组非常普遍而且有用,所以在php中有许多用于数组的内置函数。 索引数组 和 关联数组 在php中有两种数组:索引数组,关联数组
数组是数据值的集合,按有序的“key-value”对应关系来阻止。
本章将学习如何创建,增加和删除数组元素,以及遍历数组内容。因为数组非常普遍而且有用,所以在php中有许多用于数组的内置函数。
在php中有两种数组:索引数组,关联数组。
php内部将所有的数组都存储为关联数组,所以关联数组和索引数组的唯一区别在于key是什么。
如果数组不存在,那么向数组存放值将创建该数组,但是在一个未定义的数组中检索值不会创建数组,如:
echo $address[0]; echo $address; $address[0] = 'dirt-life.net'; echo $address; // 输出array
下面的代码用简单的赋值来初始化程序中的一个数组:
$address[0] = '111'; $address[1] = '222'; $address[2] = '333';
下面代码建立一个关联数组
$price['gasket'] = 12; $price['weel'] = 20; $price['trie'] =50;
初始化数组的一种更容易的方法是使用array()语言结构,该结构根据它的参数来创建一个数组。下面创建了一个索引数组,索引值是自动创建的:
$array = array('d','c','e');
使用array来创建关联数组,可以使用=>符号来分割索引和值:
$price = array( 'gasket' => 12, 'wheel' => 15, 'tire' => 50 );
注意使用空白符和对齐。虽然我们也可以把代码都挤在一起,但是那样不容易阅读,
要创建一个空数组,则不传递参数给array();
$array = array();
可以使用=>来指定一个初始索引,并在后面跟着一系列键值。键值从初始健开始插入到数组中,后面的元素索引是连续的:
$days = array(1=> 'monday','tuesday','wednesday','thursday','friday','saturday','sunday');
如果初始索引是一个非数字的字符串,那么后面的索引是从0开始的整数。
要把更多的值插入到一个已存在的索引数组末尾,使用[]语法:
$array = array('fred','jim'); $array[] = 'shouyan'; //$array[2] 是shouyan
这个语言结构假设该数组的索引是数字,并且把元素分配给下一个可用的数字索引,数字索引从0开始。试图添加值到一个关联数组是程序员常犯的错误,但是php会给新的索引数字索引而不发出警告:
range()函数创建一个连续整数或字符的数组,整数或字符的值在传递给函数的两个参数之间。如:
$number = range(2,5); // $number = array(2,3,4,5) $letters = range('a','z'); //保存字母表到数组中 $reversed_numbers = range(5,2) //$number = array(5,4,3,2)
字符串参数中只有第一个字母被用于限定范围:
range('aaa','zzz') //和range('a','z')相同
count()和sizeof()函数在用法和效果上是完全一样的,你想使用哪个函数都可以,他们返回数组中元素的个数。
$family = array('fred','wilma','pebbles'); $size = count($family);
这些函数并不根据任何可能出现的数字索引来计算元素个数.
要用重复的内容来创建一个数组,可以使用 array_pad() 函数。array_pad() 函数的第一个参数是数组,第二个参数是你想要数组拥有的最少元素个数,第三个参数是要给每个元素的初始值。
array_pad(input, pad_size, pad_value) 返回一个填充得到的新数组,而丢弃它的参数数组,注意新值是如何添加到数组的末尾的,如果想让新值增加到数组的开头,可以把第二个参数设为负值。
$secores = array(5,10); $paded = array_pad($secores, 5, 0) //(5,10,0,0,0)
数组中的值也可以是数组。这使你可以轻松的创建多维数组:
$row_0 = array(1,2,3); $row_1 = array(4,5,6); $multi = array($row_0,$_row_1);
可以通过添加更多的[]来引用多维数组的元素:
$value = $multi[1][0] //4
要使用变量替换来访问多维数组中的元素,必须将整个元素使用大括号扩起来:
echo('the value at row 2,colimen 0 is {$multi[1][0]\n}');
如果不适用大括号,则输出结果为 Array[0]
要把一个数组的所有制都复制到变量中,可以使用list结构:
list($variable,…) = $array
数组的值按照数组的内部顺序被复制到列出的变量中。在默认情况下这个顺序就是他们被插入的顺序。
$person = array('F',35,'B'); list($name,$age,$wife) = $person; //$name F $age 35 $wife B
要稀缺数组的一个子集,可以使用 array_slice(array, offset, length) 函数
* 一般来说只有在索引数组上使用 array_slice(array, offset)才有意义
* 结合 list() 和 array_slice(array, offset) 析取一些值到变量中。
$order = array('t','a','ax','s'); list($second,$third) = array_slice($order, 1, 2);
$chunks = array_chunk(array;, size [, preserve_key]);
array_keys(input) 函数根据内部顺序返回一个仅由数组中的键组成的数组:
array_values(input) 这个函数较少使用。
要检查数组中的一个元素是否存在,使用 array_key_exists(key, array) 函数,返回一个布尔值,如果数组中存在名为key的有效键,则返 true,否则返回false。
if(array_key_exists('name', $array)){ }
或者使用 isset(var)函数代替,如果元素存在且不为NULL,则函数返回true;(p149)
array_splice(input, offset [, length [, replacement]])函数可以在数组中删除或者插入元素,并且可以用被删除的元素创建另一个数组
$removed = array_splice(input, offset [, length [, replacement]]);
$subjects = array('a','b','c','d','e','f','g');
* 我们可以告诉array_splice()从位置2开始删除3个元素,这样可以删除c,d,e三个元素,如果省略 length参数,则会删除到数组末尾:
$removed = array_splice($subjects, 2, 3)
* 要在元素被删除的位置插入元素,应该使用第四个参数,替换数组的个数不需要和被删除元素的数组相同。数组可以按需要增长或收缩:
$new = array(‘x’,'y’);
array_splice($subjects, 4, 3, $new);
* 想得到把新元素插入到数组的效果,要把已存在的元素推到右边,删除0个元素:
$new = array(‘x’,'y’);
array_splice($subjects, 4, 0, $new);
* array_splice()函数也可以用于关联数组
$a = compact(‘color’,'shape’,'float’);
php中有几种方法来遍历数组,选择使用哪一种取决于你的数据和要执行的任务。
遍历数组元素最常用的方法是使用 foreach 结构:
$array = array('a','b','c'); foreach ($array as $value) { echo "Print $value\n"; }
$array = array('a' => 1,'b' => 2, 'c' => 3 ); foreach ($array as $key => $value) { echo "print $key is $value\n" }
每个php数组都会跟中当前所处理的元素;指向当前元素的指针被称为迭代器(iterator)。php有一些函数来设置、移动和重置迭代器。迭代器函数有:
each(array) 函数用来遍历数组元素,该函数根据元素的内部顺序来处理元素,这种方法不会像foreach那样产生一个数组拷贝,处理大数组时如果希望节约内存,这种方法是很有用的:
reset($address);
while(list($key,$value)) = each($address)){
echo “$key is $value\n”;
}
当需要把数组的一部分分离出来的时候,迭代器函数是很有用的。下面代码创建一个表格,并把管理数组的第一个索引和值作为表格的列标题:
$ages = array( 'person'=>'age' 'Fred' => 35, 'Barney' => 30, 'Tigger' => 8, 'Pooh' =>40 ); reset($ages); list($c1,$c2) = each($pages); while (list($c1,$c2) = each($ages)) { echo("$c1 $c2") }
$arr = array('a','b','c'); for($i = 0; $i <h2>为数组的每个元素调用函数</h2> <p>php提供了一函数 array_walk(array, funcname),用于为数组中每个元素调用用户自定义函数,自动以的函数接收2个或者三个参数:<br> * 第一个参数是元素的值<br> * 第二个参数是元素的健<br> * 第三个参数是该函数被 array_walk() 调用时使用的值</p> <pre class="brush:php;toolbar:false">function print_now($value, $key, $color){ print("$value $key $color\n"); } array_walk($arr, 'print_now','red');
array_walk()的近似函数 array_reduce(input, function),将一个函数依次应用于数组的每个元素来得到单个值??? ( P55 )
in_array()函数返回true或者false,取决于第一个参数是否是第二个参数指定的数组元素:
$arrdress = array(‘a’,'b’,'c’);
$got_a = in_array(‘a’, $arrdress) //true
$got_d = in_array(‘d’, $arrdress) //false
php 自动索引数组的值,所以 in_array() 比使用循环检查数组的每个值来寻找一个值要快得多
in_array() 的一个变种是 array_search(to_find, array),如果值被找到,in_array() 返回true,而 array_search() 返回找到元素的健:
$person = array('name'=>'fred','age'=>35,'wife'=>'willma'); $k = array_search($person, 'willma'); echo("$key");
排序该表了数组中元素的内部顺序并可以重写元素键名来反映新顺序。例如,可以使用排序来按从大到小排列一个的分清单,按字母排列一个名字清单或根据用户提交的消息来排列一组用户。
php提供三种对数组排序的方法(其中每种排序方式都可以按照升序,降序或用户定义函数的顺序排序):
* 按键排序,
* 不该变键的按值排序
* 按值排序并改变键
$names = array(‘c’,'d’,'a’,'b’);
sort($names) //a,b,c,d
$numbers = array(2,1,3);
asort($numbers) //1,2,3
$keys = array(‘c’=>3,’a'=>1,’b'=>2);
ksort($keys)
array_filter(array,callback)
function is_odd($element){ return $element % 2; } $numbers = array(9,23,24,27); $odds = array_filter($numbers,'is_odd');
原文地址:第5章 数组 Array, 感谢原作者分享。