qqruser 发表于 2017-3-4 13:46:30

Learning PHP-array

引用
存储在数组中的值为数组元素。每个数组元素有一个相关的索引,它可以用来访问元素。
在大多数编程语言中,数组都具有数字索引,而且这些索引通常是从0或1开始的。

PHP允许间隔性地使用数字或者字符串作为数组的索引。可以将数组的索引设置为传统的数字型,也可以将索引设置为任何所希望的索引,这样可以使得索引更有意义和有用。
访问数组的内容,可以直接使用其名称。

$products
使用循环访问数组

foreach($products as $current){
echo $current.' ';
}
<?php
$products = array('a'=>1,'b'=>2,'c'=>3);
foreach ($products as $current){
echo $current.'<br />';
}
?>
<?php
$products = array('a'=>1,'b'=>2,'c'=>3);
foreach ($products as $key=>$value){
echo $key." - ".$value."<br .>";
}
?>
<?php
$products = array('a'=>1,'b'=>2,'c'=>3);
while (list($key,$value) = each($products))
echo "$key - $value<br />";
?>

需要注意的一点是,当使用each()函数时,数组将记录当前元素。如果希望在相同的脚本中两次使用该数组,就必须使用函数reset()将当前元素重新设置到数组开始出。
reset($products);

数组操作符

[*]+      联合   $a + $b      $a和$b的联合。数组$b将被附加到$a中,但是任何关键字冲突的元素将不会被添加。
[*]==    等价   $a == $b    如果$a和$b包含相同的元素,返回true
[*]===恒等   $a === $b如果$a和$b包含相同顺序和类型的元素,返回true
[*]!=   不等价$a != $b   如果$a和$b不包含相同元素,返回true
[*]<>    不等价$a <> $b    与!=相同
[*]!==   不恒等$a !=== $b 如果$a和$b不包含相同顺序类型的元素,返回true

多维数组

<?php
$products = array(
array(
'Code'=>'TIR',
'Description' => 'Tires',
'Price' => 100
),
array(
'Code'=>'OIL',
'Description' => 'Oil',
'Price' => 10
)
);
for($row = 0; $row < 2; $row++){
echo '|'.$products[$row]['Code'].'|'.$products[$row]['Description'].'|'.$products[$row]['Price'].'|<br />';
}
?>

数组的排序

[*]sort()函数
[*]sort($products)
[*]函数asort()根据数组的每个元素值进行排序。
[*]函数ksort()按关键字排序而不是按值排序。
[*]实现反向排序的函数为
[*]rsort()、arsort()和krsort()。

多维数组的排序
需要自己编写比较函数。

function compare($x,$y){
if($x == $y){
return 0;
}else if($x< $y)){
return -1;
}else{
return 1;
}
}
usort($products,'compare');
shuffle()函数
array_reverse()函数,反转数组元素的元素顺序。
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>
<html>
<head>
<title>Bob's Auto Parts - Customer Orders</title>
</head>
<body>
<h1>Bob's Auto Parts</h1>
<h2>Customer Orders</h2>
<?php
$orders = file("$DOCUMENT_ROOT/orders/orders.txt");
$number_of_orders = count($orders);
if($number_of_orders == 0){
echo "<p><strong>No orders pending.Please try again later.</strong></p>";
}
echo "<table border = \"1\"\n>";
echo "<tr><th bgcolor=\"#CCCCFF\">Order Date</th>
<th bgcolor=\"#CCCCFF\">Tires</th>
<th bgcolor=\"#CCCCFF\">Oil</th>
<th bgcolor=\"#CCCCFF\">Spark Plugs</th>
<th bgcolor=\"#CCCCFF\">Total</th>
<th bgcolor=\"#CCCCFF\">Address</th>
</tr>";
for($i=0;$i<$number_of_orders;$i++){
$line = explode("\t", $orders[$i]);
$line = intval($line);
$line = intval($line);
$line = intval($line);
echo "<tr>
<td>".$line."</td>
<td align=\"right\">".$line."</td>
<td align=\"right\">".$line."</td>
<td align=\"right\">".$line."</td>
<td align=\"right\">".$line."</td>
<td>".$line."</td>
</tr>";
}
echo "</table>";
?>
</body>
</html>
explode()函数进行字符串的分割。
原型如下:
array explode(string separator, string string [, int limit])
intval()函数可以将一个字符串转换成一个整数。

[*]each()函数会在指针前移一个位置之前返回当前元素。
[*]next()函数是将指针前移,然后在返回新的当前元素。
[*]reset()函数将返回指向数组第一个元素的指针。
[*]end()可以将指针移动到数组末尾。
[*]要反向遍历一个数组,可以使用end()和prev()函数。
[*]prev()函数和next()函数相反,它是将当前指针往回移一个位置然后再返回新的当前元素。

对数组的每一个元素应用任何函数:array_walk()
bool array_walk(array are, string fund, )
count()函数统计数组中元素个数
sizeof()函数具有同样的作用,这两个函数都可以返回数组元素的个数。
array_count_values()更加复杂一些。如果调用array_count_values($array)这个函数将会统计每个特定的值在数组$array中出现过的次数。
将数组转换成标量变量:extract()
对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数extract()将它们转换成一系列的标量变量。extract()的函数原型如下所示:
extract(array var_array [, int extract_type] [, string prefix]);
引用
函数extract()的作用是通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量则是数组中的值。


<?php
$products=array(
'Code'=>'TIR',
'Description' => 'Tires',
'Price' => 100
);
extract($products);
echo $Code;
echo $Description;
echo $Price;
?>
extract_type的可用值

[*]EXTR_OVERWRITE         当发生冲突时覆盖已有变量(默认值)
[*]EXTR_SKIP            当发生冲突时跳过一个元素
[*]EXTR_PREFIX_SAME       当发生冲突的时创建一个名为$prefix_key变量。必须提供prefix参数
[*]EXTR_PREFIX_ALL      在所有变量名称之前加上由prefix参数的指定值。必须提供prefix参数
[*]EXTR_PREFIX_INVALID    使用指定的prefix在可能无效的变量名称前加上前缀。必须提供prefix参数
[*]EXTR_IF_EXISTS         只提取已经存在的变量,这个参数对于数组到变量的转换时非常有用
[*]EXTR_PREFIX_IF_EXISIS只有在不带前缀的变量已经存在的情况下,创建带有前缀的变量。
[*]EXTR_REFS            以引用的方式提取变量

Q:
1、对数组元素进行排序(正反,一维数组以及多维数组)
参考资料:
PHP&MySQL.Web
页: [1]
查看完整版本: Learning PHP-array