php学习笔记 数组的声明与遍历

 更新时间:2016年11月25日 14:59  点击:1896
在php中数组是一个非常重要的数据存储类型,本文章主要是介绍了数据创建与数组删除及遍历查询数据值输出,下面一起来看看。

数组的声明

1、直接赋值的方式声明数组

    $数组变量名[索引值] = 资料内容 //其中索引值(下标)可以是一个字符串或数字

但有的时候,我们也可以直接给数组赋值,并不填写“索引值”,那第此时,数组的下标就会自动以数字0开始增加。

    $数组变量名[] = 资料内容 //其中索引值(下标)可以是一个字符串或数字

 2、使用array()语言结构新建数组

在实际使用中我们可以用array()语言结构来新建一个数组,并初始化数组。

    $数组变量名=array( key1 => value1, key2 => value2, ...... ,keyN => valueN );

当然,像上面我们并不一定就这样,我们有的时候会像下面这样来做:(区别在于索引值为数字)

    $数组变量名=array( value1, value2, ...... , valueN );

 3、多维数组的声明

多维数组其实也就是在数组里面再次存放数组。如下:

    $content = array (
    array(1,'高某','A公司','北京市'),
    array(2,'高某1','B公司','北京市'),
    array(3,'高某','C公司','北京市')
    );

 数组的遍历

1、使用for语句循环遍历数组

在其它的编程语言中,数组的遍历通常都是使用for循环语句,通过数组的下标来访问数组中每个成员元素,但要求数组的下标必须是连续的数字索引。而在PHP中,不仅可以指定非连续的数字索引值,而且还存在以字符为下标的关联数组。所以在PHP中,其实是很少使用for语句来遍历数组。下面来晒一个例子给大家看一下,大家应该不会陌生。

  

 代码如下 复制代码
  <?php
    //使用array()语句将联系人列表中第一条记录声明成一维数组$contact
    $contact=array(1,"高某","A公司","北京市","(015)9582451","gao@php.com");
    //以表格的形式输出一维数组中的每个元素
    echo '<table border="1" width="600" align="center">'; //输出<table>标记定义表格
    echo '<caption><h1>联系人列表</h1></caption>'; //输出表头
    echo '<tr bgcolor="#dddddd">'; //输出表格的行开始,背景为灰色
    
    //以html的th标记输出表格的字段名称
    echo '<th>编号</th><th>姓名</th><th>公司</th><th>地址</th><th>电话</th><th>EMAIL</th>';
    echo '</tr><tr>';
    for($i=0;$i<count($contact);$i++){ //使用for循环来输出一维数组中的元素
    echo '<td>'.$contact[$i].'</td>';
    }
    echo '</tr></table>'; //输出表格的关闭标记
    ?>

遍历多维数组时,要使用循环嵌套逐层进遍历。在此就不用代码列出来了。

 
2、使用foreach语句遍历数组

既然for循环语句在PHP中并不常用,那么就让我们来看一下foreach到底有什么可取之处吧!

foreach语句有两种语法格式,第二种比较次要但却是第一种有用的扩展。

第一种语法格式:

    foreach(array_expression as $value ){
    
    循环体
    
    }

第二种语法模式:

    foreach(array_expression as $key => $value){
    
    循环体
    
    }

 3、联合使用list()、each()、和while()、循环遍历数组

each()函数

each()函数需要传递一个数组作为参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置。键/值对被返回为带有四个元素的关联和索引混合的数组,键名分别为0、1、key和value。其中键名0和key对应的值是一样的,是数组元素的键名,1和value则包含有数组元素的值。如果内部指针越过了数组的末端,则each()返回FALSE。each()函数的使用如下所示:

   

 代码如下 复制代码
<?php
    //声明一个数组$contact作为each()函数的参数
    $contact=array("ID"=>1,"姓名"=>"高某","http://www.111cn.Net公司"=>"A公司","地址"=>"北京市");
    
    $id=each($contact); //返回数组$contact中第一个元素的键/值对,是带有4个元素的数组
    print_r($id); //返回数组$id:Array([1]=>1[value]=>1[0]=>ID[key]=>ID)
    $name=each($contact); //返回数组Rcontact中第二个元素的键/值对,是带有4个元素的数组
    print_r($name); //返回数组$name:Array([1]=>高某 [value]=>高某 [0]=>姓名 [key]=>姓名)
    $company=each($contact);
    print_r($company);
    $address=each($contact);
    print_r($address);
    $no=each($contact); //已经到数组$contact的末端,返回false
    var_dump($no); //输出$no的值:bool(false)
    
    ?>

 list()函数

这不是真正的函数,而是PHP的语言结构。list()用一步操作给一组变量进赋值,即把数组中的值赋给一些变量。list()仅能用于数字索引的数组并假定数字索引从0开始。语法格式如下所示:

    list(mixed varname,mixed ...)=array_expression //list()语句的语法格式

list()语句和其它函数在使用上有很大的区别,并不是直接接收一个数组作为参数。而是通过“=”去处符以赋值的方式,将数组中每个元素的值,对应的赋给list()函数中的每个参数。list()函数又将它中的每个参数转换为直接可以在脚本中使用的变量。使用方法如下 :

  

 代码如下 复制代码
  <?php
    $info=array('coffee','brown','caffeine'); //声明一个索引数组$info
    
    list($drink,$color,$power)=$info; //将数组中的所有元素转为变量
    echo "$drink is $color and $power makes it special.n";//输出的三个变量值是数组中三个元素的值
    
    list($drink, ,$power)=$info; //将数组中的部分元素变为变量
    echo "$drink has $power.n"; //输出的两个变更值是数组中的前两个元素的值
    
    list(,,$power)=$info; //跳过前两个变量只将数组中第三个元素的值转为变量
    echo "I need $power!n"; //输出的一个变量值是数组中桃花汛三个元素的值勤
    ?>

通过上例了解list()函数的用法之后,将each()函数和list()函数结合起来使用。代码如下:

   

 代码如下 复制代码
<?php
    $contact=array("ID"=>1,"姓名"=>"http://www.111Cn.Net","公司"=>"A公司","地址"=>"北京市");
    list($key,$value)=each($contact); //将each()函数和list()函数联合使用
    echo "$key=>$value"; //输出变量$key和$value,中间使用"=>"分隔
    ?>

 while()循环遍历数组

while()循环的语法格式如下:

    while( list($key,$value) = each(array_expressin) ){
    循环体;
    }

使用这种组合改写前面使用foreach遍历过的一维数组。代码如下所示:

   

 代码如下 复制代码
<?php
    //声明一个一维的关联数组$contact
    $contact=array("ID"=>1,
    "姓名"=>"高某",
    "公司"=>"A公司",
    "地址"=>"北京市",
    "电话"=>"(010)987665432",
    "EMAIL"=>"gao@php.com"
    );
    //以HTML列表的方式输出数组中每个元素的信息
    echo '<dl>一个联系人信息:';
    while(list($key,$value) = each($contact) ){ //将foreach语句改写成while,list()和each()的组合
    echo "<dd>$key:$value</dd>"; //输出每个元素的键/值勤
    }
    echo '</dl>';
    ?>

 4、数组内部指针控制函数遍历数组

对于数组指针的控制PHP提供了以下几个内奸函数可以利用。

》》current():是取得目前指针位置的内容资料

》》key():用来读取目前指针所指向资料的索引值

》》next():将数组中的内部指针移动到下一个单无

》》prev():将数组的内部指针倒回一位

》》end():将数组的内部指针向最后一个元素

》》reset():将目前指针无条件移至第一个索引位置

这些函数的参数都只有一个,就是要操作的数组本身。在下面的示例中,将使用这些数组指针函数控制数组中元素的读取顺序。代码如下所示:

 

 代码如下 复制代码
   <?php
    //声明一个一维的关联数组$contact,使用"=>"去处符指定了每个元素的字符串下标
    $contact = array("ID"=>1,
    "姓名"=>"高某",
    "公司"=>"A公司",
    "地址"=>"北京市",
    "电话"=>"(010)98765432",
    "EMAIL"=>"gao@php.com"
    );
    //数组刚声明时,数组指针在数组中第一个元素位置
    //使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值
    echo '第一个元素:'.key($contact).'=>'.current($contact).'<br>'; //输出:第一个元素:ID=>1
    echo '第一个元素:'.key($contact).'=>'.current($contact).'<br>'; //数组指针没有移动,输出同上
    
    next($contact); //将数组$contact中的指针向一个元素移动一次,指向第二个元素的位置
    next($contact); //将数组$contact中的指针向一个元素移动一次,指向第三个元素的位置
    echo '第三个元素:'.key($contact).'=>'.current($contact).'<br>'; //输出第三个元素的键和值
    
    end($contact); //再将数组$contact中指针移动到最后,指向最后一个元素
    echo '最后一个元素:'.key($contact).'=>'.current($contact).'<br>'; //输出最后一个元素的键和值
    
    prev($contact); //将数组$contact中的指针倒回一位,指向最后第二个元素
    echo '最后第二个元素:'.key($contact).'=>'.current($contact).'<br>'; //输出最后第二个元素的键和值
    
    reset($contact); //再将数组$contact中的指针重置到第一个元素的位置,指向第一个元素
    echo '又回到了第一个元素'.key($contact).'=>'.current($contact).'<br>'; //输出第一个元素的键和值
    ?>

数据排序


•sort() 函数用于对数组单元从低到高进行排序。
•rsort() 函数用于对数组单元从高到低进行排序。
•asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
•arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
•ksort() 函数用于对数组单元按照键名从低到高进行排序。
•krsort() 函数用于对数组单元按照键名从高到低进行排序。

例子:

 代码如下 复制代码
<?php
$arr = array("b", "a", "c");
sort($arr);
print_r($arr);
?>

运行该例子输出:

Array ( [0] => a [1] => b [2] => c )
在本例中, $arr 数组单元被按照字母顺序排序,而数组单元经过排序后,键值重新分配。

rsort()
PHP rsort() 函数行为与 sort() 相反,对数组单元进行由高到低排序,请参考 sort() 函数使用。

asort()
PHP asort() 函数用于对数组单元从低到高进行排序并保持索引关系,如果成功则返回 TRUE,失败则返回 FALSE。

语法:

bool asort( array &array [, int sort_flags] )
可选参数 sort_flags 用以改变排序的行为,具体参见 sort()。

例子:

 代码如下 复制代码
<?php
$arr = array("b", "a", "c");
asort($arr);
print_r($arr);
?>

运行该例子输出:

Array ( [1] => a [0] => b [2] => c )

注:本文内容参考于《细说PHP》中的数组部分,仅作学习之余的个人笔记。

如果我们利用textarea提交的数据回车换行与空格都会自动过滤了,所有提交的数据都是没有格式的,下面我们一起来看看解决textarea中回车换行问题。

方法一,

 代码如下 复制代码

preg_replace("'([rn])[s]+'", "", $content) //去除回车换行符

方法二,

 代码如下 复制代码
str_replace(chr(13),'<br />',$body ) //这样把body中的回车变成了br了。

本站原创转载注明来源 www.111cn.net

php中取小数位的函数有sprintf,ceil,floor,round等等函数来实现四舍五入,下面我们就一起来看看具体的实例吧。

本篇文章将使用php对数字进行四舍五入保留N位小数,以及使用php对数字进行取整的方法做个小总结。

(1)php保留三位小数并且四舍五入

 代码如下 复制代码

$num=0.0215489;
echo sprintf("%.3f", $num); // 0.022


(2)php保留三位小数不四舍五入

 

 代码如下 复制代码
$num=0.0215489;
echo substr(sprintf("%.4f", $num),0,-1); // 0.021


(3)php进一法取整数(这个在分页程序的页数程序里面会用到)

 代码如下 复制代码

echo ceil(4.3);    // 5
echo ceil(9.999);  // 10


(4)php舍去法取整数

 代码如下 复制代码

echo floor(4.3);   // 4
echo floor(9.999); // 9

(5),round函数

例 1. round() 例子

 代码如下 复制代码

<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
?> 

下面我们一起来看看php中关于抽象(abstract)类和抽象方法的问题解析,希望本文章对各位同学会有所帮助哦。

在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口。而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点。

什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字"abstract"来修饰。


1、抽象关键字 :abstract

抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用adstract关键字。

2、抽象方法和抽象类的定义

一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。

abstract class class1{                                             

   abstract function fun1();
……
}

1、类中至少有一个抽象方法
2、抽象方法不允许有{ }
3、抽象方法前面必须要加abstract


3、抽象类和方法使用规则


抽象类的几个特点:

1、不能被实例化,只能被继承

2、继承的派生类当中要把所有抽象方法重载才能实例化

php中关于抽象(abstract)类和抽象方法

关于抽象方法的声明如下:

 代码如下 复制代码

<?php
abstract function fun1();

?>


什么是抽象类呢?只要一个类里面有一个方法是抽象方法,那么这个类就必须定义为抽象类。抽象类也要使用关键字"abstract"来修饰,抽象类不能实例化对象,所以抽象方法作为子类方法重载的模板使用的,且要把继承的抽象类里的方法都实现。

关于抽象类以及抽象类的实现举例如下:

 代码如下 复制代码

<?php
abstract class User{  //定义抽象类
    abstract protected function getUser(); //定义抽象方法
    public function print_content(){
        print $this->getUser();
    }
}

class vipUser extends User{
    protected function getUser(){
        return "抽象类与抽象方法";
    }
}

$user=new vipUser(); //实例化子类
$user->print_content(); //抽象类与抽象方法
?>


注意:抽象类继承另外一个抽象类时(目的是对该抽象类的扩展),不能重写父类的抽象方法。

在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。

 代码如下 复制代码

<?php
abstract class User{
 protected static  $sal=0;
 static abstract function getSal();
 static abstract function setSal($sal);
}
class VipUser extends User{
 static function getSal(){
  return self::$sal;
 }
 static function setSal($sal){
  self::$sal=$sal;
 }
}
VipUser::setSal(100);
echo "you sal is " . VipUser::getSal();
?>

在php中$this、static、final、const、self用法类对象中了,当然有两个变量是可以用在页面或函数中,下面我们一起来看看它们的用法吧。

本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法。

$this

$this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式。常见用法如:

$this->属性

$this->方法

举例如下:

 代码如下 复制代码
<?php
class MyClass{
 private $name;
 public  function __construct($name){
  $this->name=$name;
 }
 public function getname(){
  return $this->name;
 }
 public  function printName(){
  echo $this->getname();
 }
}
$myclass= new MyClass("I Like www.111cn.net");
$myclass->printName();//输出:I Like www.111cn.net
?>


在类里面调用当前类的属性和方法有三种方法,分别是self、parent、$this,这三个关键字的区别是:self用来指向当前的类;parent用于指向当前类的父类,可以使用该关键字调用父类的属性和方法;$this用来在类体内调用自身的属性和方法。

static

关键字可以是self(在类内部调用静态成员时所使用)静态成员所在的类名(在类外调用类内部的静态成员时所使用)

声明一个静态变量如下:

static $val='';

只存在于函数作用域的变量,函数执行之后变量的值不会丢失,只会初始化一次,初始化静态变量不能使用表达式,不用全局变量代替是因为全局变量会被所有函数访问容易造成维护不宜。

在类中使用static有两种主要用途、定义静态成员和定义静态方法。静态成员只保留一个变量的值,这个值对所有实例都是有效的,如下:

 代码如下 复制代码
<?php
class MyObject{
 public static $myStaticVar=0;
 function myMethod(){
  self::$myStaticVar+=2;
  echo self::$myStaticVar;
 }
}
$instance1=new MyObject();
$instance1->myMethod();
$instance2=new MyObject();
$instance2->myMethod();

//结果将分别打印2、4

 

 代码如下 复制代码

<?php
class Book{
 static $num=0;
 public function showMe(){
  echo"您是滴".self::$num."位访客";
  self::$num++;
 }
}
$book1=new Book();
$book1->showMe();
echo"<br>";
$book2=new Book();
$book2->showMe();
echo"<br>";
echo"您是滴".Book::$num."位访客";
?>


结果将是:

您是滴0位访客
您是滴1位访客
您是滴2位访客

另外需要注意的是如果类的方法是static的,他所访问的属性也必须是static的。

final

PHP final关键字可以修饰类同样可以修改类中的方法,但它们的作用是差不多的,即如果你使用了final关键字来修饰了,那么这个被修饰的类或者方法将不能被扩展或者继承。你只能老老实实去引用它。如果你在类前面使用了final,这就是说明这个类不能使用继承;如果你在方法前使用了PHP final关键字,这就是说明这个方法不能被覆盖。道理就是这么简单,让我们也看个简单的示例吧。

 

最终的类和方法,不能继承,该关键字修饰的方法不能被重写。一般用法如下:

<?php
final class MyClass{//此类将不允许被继承
 final function fun1(){......}//此方法将不允许被重写
}

 代码如下 复制代码
    < ?PHP  
    final class BaseClass {  
    public function test() {  
    echo "BaseClass::test() calledn";  
    }  
    final public function moreTesting() {  
    echo "BaseClass::moreTesting() calledn";  
    }  
    }  
    class ChildClass extends BaseClass {  
    public function moreTesting() {  
    echo "ChildClass::moreTesting() calledn";  
    }  
    }  
    // Results in Fatal error: Cannot override final method BaseClass::moreTesting()  
    ?> 

const

在类的内部方法访问已经声明为const及static的属性时,需要使用self::$name的形式调用。举例如下:

 代码如下 复制代码
<?php
class clss_a{
 private static $name="static class_a";
 const PI=3.14;
 public $value;
 public static function getName(){
  return self::$name;
 }
 //这种写法有误,静态方法不能访问非静态属性
 public static function getName2(){
  return self::$value;
 }
 public function getPI(){
  return self::PI;
 }
}

注意const属性的申明格式是const PI=3.14,而不是const $PI=3.14。

self

self表示类本身,指向当前的类。通常用来访问类的静态成员、方法和常量。

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • C# 类的声明详解

    本文主要对C# 类的声明进行详细介绍。具有一定的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • php中数组写入文件方法

    在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
  • JavaScript var声明变量背后的原理示例解析

    只要是写过点JS代码,很简单一个var 就完事了。那对于JS编译器背后它又发生了什么呢?那就一步步通过代码来讲起。 复制代码 代码如下: x = 1; alert(x); var y = function() { alert(x); var x = 2; alert(x); } y();...2013-10-13
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • js有序数组的连接问题

    1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法 我首先想到的是使用...2013-10-04
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • python 实现将Numpy数组保存为图像

    今天小编就为大家分享一篇python 实现将Numpy数组保存为图像,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27