`

Learning PHP-array

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


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

使用循环访问数组
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[1] == $y[1]){
          return 0;
     }else if($x[1]< $y[1])){
          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[1] = intval($line[1]);
$line[2] = intval($line[2]);
$line[3] = intval($line[3]);
echo "<tr>
  <td>".$line[0]."</td>
<td align=\"right\">".$line[1]."</td>
<td align=\"right\">".$line[2]."</td>
<td align=\"right\">".$line[3]."</td>
<td align=\"right\">".$line[4]."</td>
<td>".$line[5]."</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, [mixed userdata])

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics