PHP循环之PHP基础入门教程

 更新时间:2016年11月25日 15:02  点击:1577
在php中PHP循环包括有while,do while,for,foreach,each等等常用的PHP循环语句,下面我来总结一下我在学习循环时的一些笔记吧。

PHP中的循环主要用户执行相同代码块运行指定的次数。

PHP循环主要有四种:while,do…while,for,foreach。下面我们分开讲解每种循环的用法。

while语句:

只要指定的条件成立,则循环执行代码块。

格式:

while(expr)
{
    statement;
}

语义:首先判断expr,如果表达式expr为假则结束;如果表达式expr为真,执行statement语句,执行完毕再次判断expr,若表达式expr仍为真,则继续执行statement语句;直至表达式expr为假,结束。
例:

 代码如下 复制代码

<?php
$i=1;
while($i<=5){
echo $i;
$i++;
}
?>

上面的例子示范了一个循环,只要变量 i 小于或等于 5,代码就会一直循环执行下去。循环每循环一次,变量就会递增 1,然后输入i的值;

do…while 语句:

首先执行一次代码块,然后在指定的条件成立时重复这个循环.
格式:

do{
    statement;
}

while(expr)语义:首先执行一次statement语句,然后再判断expr,如果表达式expr为假则结束;如果表达式expr为真,则继续循环执行statement语句,执行完毕再次判断expr,若表达式expr仍为真,则继续执行statement语句;直至表达式expr为假,结束。

注意:他和while的区别在于,do…while第一次不进行任何判断就执行一次语句,然后再进行判断条件是否成立,这里要注意,其他和while是一样的。
例子:

 代码如下 复制代码

<?php
$i=6;
do
  {
  $i++;
  echo "The number is " . $i . "<br />";
  }
while ($i<5);
?>

上面的例子示范了一个循环,我给变量i赋值6,这里很显然和while中的条件相比较是不成立的,但结果输入6,也就是之前说的do…while语句,他第一次没进行任何判断,先执行一次,然后再判断条件是否成立。

for 语句

:如果您已经确定了代码块的重复执行次数,则可以使用 for 语句。
语法

for (initialization; condition; increment)
{
  code to be executed;
}

语义:for 语句有三个参数。第一个参数初始化变量,第二个参数保存条件,第三个参数包含执行循环所需的增量。如果 initialization 或 increment 参数中包括了多个变量,需要用逗号进行分隔。而条件必须计算为 true 或者 false。
例子:

下面的例子会把文本 “Hello World!” 显示 5 次:

 代码如下 复制代码

<?php
for ($i=1; $i<=5; $i++)
{
  echo "Hello World!<br />";
}
?>

foreach 语句:foreach 语句用于循环遍历数组。

每进行一次循环,当前数组元素的值就会被赋值给 value 变量(数组指针会逐一地移动) – 以此类推。
语法

foreach (array as value)
{
    code to be executed;
}

例子
下面的例子示范了一个循环,这个循环可以输出给定数组的值:

 代码如下 复制代码

<?php
$arr=array("one", "two", "three");
foreach ($arr as $value)
{
  echo "Value: " . $value . "<br />";
}
?>

释义:首先我定义一个数组arr,然后我使用foreach来循环,其中($arr as $value)的意思是,把$arr数组中的值赋给$value,然后执行语句是输出$value的值。
输出的结果为:

one
two
three

在PHP中Switch语句叫开关语句,下面我来给大家分享我在php学习中对于PHP Switch语句的理解与使用实例,希望此文章对大家有所帮助。

PHP 中的 Switch 语句用于执行基于多个不同条件的不同动作。

Switch 语句

如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。

使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

语法

 代码如下 复制代码

switch (expression)
{
case label1:
  code to be executed if expression = label1;
  break; 
case label2:
  code to be executed if expression = label2;
  break;
default:
  code to be executed
  if expression is different
  from both label1 and label2;
}

实例

工作原理:

对表达式(通常是变量)进行一次计算
把表达式的值与结构中 case 的值进行比较
如果存在匹配,则执行与 case 关联的代码
代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
如果没有 case 为真,则使用 default 语句

 代码如下 复制代码

<?php
switch ($x)
{
case 1:
  echo "Number 1";
  break;
case 2:
  echo "Number 2";
  break;
case 3:
  echo "Number 3";
  break;
default:
  echo "No number between 1 and 3";
}
?>

</body>
</html>

本文章来给各位同学详细介绍关于PHP 数组之PHP基础入门教程,各位有需要学习php数组使用的朋友可进入参考。

什么是数组?
在使用 PHP 进行开发的过程中,或早或晚,您会需要创建许多相似的变量。

无需很多相似的变量,你可以把数据作为元素存储在数组中。

数组中的元素都有自己的 ID,因此可以方便地访问它们。

有三种数组类型:
数值数组
带有数字 ID 键的数组
关联数组
数组中的每个 ID 键关联一个值
多维数组
包含一个或多个数组的数组
数值数组
数值数组存储的每个元素都带有一个数字 ID 键。

可以使用不同的方法来创建数值数组:

例子 1
在这个例子中,会自动分配 ID 键:

 代码如下 复制代码

$names = array("Peter","Quagmire","Joe");

例子 2
在这个例子中,我们人工分配的 ID 键:

 代码如下 复制代码

$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";可以在脚本中使用这些 ID 键:

<?php

$names[0] = "Peter";
$names[1] = "Quagmire";
$names[2] = "Joe";

echo $names[1] . " and " . $names[2] . " are ". $names[0] . "'s neighbors";
?>

以上代码的输出:

Quagmire and Joe are Peter's neighbors

关联数组
关联数组,它的每个 ID 键都关联一个值。

在存储有关具体命名的值的数据时,使用数值数组不是最好的做法。

通过关联数组,我们可以把值作为键,并向它们赋值。

例子 1
在本例中,我们使用一个数组把年龄分配给不同的人:

 代码如下 复制代码

$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);

例子 2
本例与例子 1 相同,不过展示了另一种创建数组的方法:

 代码如下 复制代码
$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

可以在脚本中使用 ID 键:

 代码如下 复制代码

<?php

$ages['Peter'] = "32";
$ages['Quagmire'] = "30";
$ages['Joe'] = "34";

echo "Peter is " . $ages['Peter'] . " years old.";
?>

以上脚本的输出:

Peter is 32 years old.

多维数组
在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,以此类推。

例子 1
在本例中,我们创建了一个带有自动分配的 ID 键的多维数组:

 代码如下 复制代码

$families = array
(
  "Griffin"=>array
  (
  "Peter",
  "Lois",
  "Megan"
  ),
  "Quagmire"=>array
  (
  "Glenn"
  ),
  "Brown"=>array
  (
  "Cleveland",
  "Loretta",
  "Junior"
  )
);如果输出这个数组的话,应该类似这样:

Array
(
[Griffin] => Array
  (
  [0] => Peter
  [1] => Lois
  [2] => Megan
  )
[Quagmire] => Array
  (
  [0] => Glenn
  )
[Brown] => Array
  (
  [0] => Cleveland
  [1] => Loretta
  [2] => Junior
  )
)

例子 2
让我们试着显示上面的数组中的一个单一的值:

 代码如下 复制代码

echo "Is " . $families['Griffin'][2] .
" a part of the Griffin family?";

以上代码的输出:

Is Megan a part of the Griffin family?

在php中数组合并相加与array_merge数组合并是有一点区别的,下面小编来给各位同学介绍array_merge与数组相加合并的区别。


+ :

首先出现的会覆盖后出现的


array_merge:

后出现的会覆盖前面出现的。但是如果是数字索引,则是叠加效果。

 代码如下 复制代码

$array1 = Array(
    0 => 111
);

$array2 = Array(
    0 => 222,
    1 => 3333
);

array_merge 后:
Array
(
    [0] => 111
    [1] => 222
    [2] => 3333
)

+ 后:
Array
(
    [0] => 111
    [1] => 3333
)

情况二:

$array1 = Array(
    0 => 111
);

$array2 = Array(
    'h' => 222,
    1 => 3333
);
array_merge 和 + 的结果是一样:
Array
(
    [0] => 111
    [h] => 222
    [1] => 3333
)


结果很明显:

array_merge就是两个数组的相加,键值如果是数字的话 会重新排列 如果不的话是不会修改
而+是两个数组相加会把相同的键值的值会被前面的数组给替换,如果不一样的键值那就和array_merge一样的效果.

面向对象在我看来就是各种php类,方法,函数了,下面我来给大家介绍一篇关于php面向对象入门教程,各位同学有兴趣可参考。

第一种情况:子类没有定义构造函数时,默认继承。

第二种情况:子类定义了构造函数,则不会被继承。

对于4.x,如果父类恰好定义了子类的同名函数,则会被当做子类的构造函数:

 代码如下 复制代码

class A
{
    function A()
    {
      echo "I am the constructor of A.<br>n";
    }

    function B()
    {
        echo "I am a regular function named B in class A.<br>n";
        echo "I am not a constructor in A.<br>n";
    }
}

class B extends A
{
    function C()
    {
        echo "I am a regular function.<br>n";
    }
}

//php4 will call B()
$b = new B;

上面的代码在php5中则会调用A而不会调用B()

PHP面向对象:接口实例

们设计一个在线销售系统,用户部分设计如下:

将用户分为,NormalUser, VipUser, InnerUser三种。

要求根据用户的不同折扣计算用户购买产品的价格。

并要求为以后扩展和维护预留空间。

用户部分先声明了一个接口User,用户都是User的实现。

user.php

 代码如下 复制代码

<?
/*
* 定义了 User接口.
* 和子类 NormalUser,VipUser,InnerUser
*/
//User接口,定义了三个抽象方法.
interface User{
 public function getName();
 public function setName($_name);
 public function getDiscount();
}
abstract class AbstractUser implements User{
 private $name = ""; //名字
 protected  $discount = 0; //折扣
 protected  $grade = "";  //级别
 
 public function __construct($_name){
  $this->setName($_name);
 }
 public function getName(){
  return $this->name;
 }
 public function setName($_name){
  $this->name = $_name;
 }
 public function getDiscount(){
  return $this->discount;
 }
 
 public function getGrade(){
  return $this->grade;
 }
}
class NormalUser extends AbstractUser  { 
 protected  $discount = 1.0;
 protected  $grade = "NormalUser";
}

class VipUser extends AbstractUser {
 protected  $discount = 0.8;
 protected  $grade = "VipUser";
}

class InnerUser extends AbstractUser {
 protected  $discount = 0.7;
 protected  $grade = "InnerUser";
}
?>

关于产品,我们进行了如下设计。

声明一个接口Product,然后从Product继承下Book接口。

在线销售的图书最后是实现了Book接口的BookOnline类。

Product.php

 代码如下 复制代码

<?
/*与产品相关的类放.*/
Interface Product{ //定义产品接口
 public function getProductName();
 public function getProductPrice();
}

interface Book extends Product { // book是产品的一个分类
 public function getAuthor();
}

class BookOnline implements Book{ // 定义book类.
 private $productName;  // 产品名
 private $productPrice; // 产品价格
 private $author;  //作者
 
 public function __construct($_bookName){
  $this->productName = $_bookName;
  //这里放置相关初始化的代码.
  //与数据库关联的代码.
 }
 
 public function getProductName(){
  return $this->productName;
 }
 
 public function getProductPrice(){
  //这里从数据库读取价格.
  //假设价格是 100元.
  $this->productPrice = 100;
  return $this->productPrice;
 }
 
 public function getAuthor(){
  //从数据库里面取值.
  return $this->author;
 } 
}
?>

关于结算,我们使用了独立的结算类,使用静态方法做计算。产品结算。注意参数类型。

 代码如下 复制代码

<?
include_once("User.php");
include_once("Product.php");
//买了产品到底多少钱呢?
class ProductSettle{
 public static function  finalPrice(User $_user,Product $_product,$number = 1){
  $price = $_user->getDiscount() * $_product->getProductPrice() * $number;
  return $price;
 }
}
?>

下面的例子是实现。大家可以自己分析下。

 代码如下 复制代码

<?
include_once("./class/User.php");
include_once("./class/Product.php");
include_once("./class/ProductSettle.php");

$number = 10;
$book = new BookOnline("设计模式");


$user = new NormalUser("Tom");
$price = ProductSettle::finalPrice($user,$book,$number);
$str =  "您好,尊敬的用户 " . $user->getName() . " <br>";
$str .= "您的级别是 ". $user->getGrade() .", <br>";
$str .= "您的折扣是 " . $user->getDiscount() . "<br>";
$str .= "购买 $number 本 《 ". $book->getProductName() ;
$str .=  "》的价格是 $price <br><br>";
echo $str;


$user = new vipUser("Tom");
$price = ProductSettle::finalPrice($user,$book,$number);
$str =  "您好,尊敬的用户 " . $user->getName() . " <br>";
$str .= "您的级别是 ". $user->getGrade() .", <br>";
$str .= "您的折扣是 " . $user->getDiscount() . "<br>";
$str .= "购买 $number 本 《 ". $book->getProductName() ;
$str .=  "》的价格是 $price <br><br>";
echo $str;

$user = new InnerUser("Tom");
$price = ProductSettle::finalPrice($user,$book,$number);
$str =  "您好,尊敬的用户 " . $user->getName() . " <br>";
$str .= "您的级别是 ". $user->getGrade() .", <br>";
$str .= "您的折扣是 " . $user->getDiscount() . "<br>";
$str .= "购买 $number 本 《 ". $book->getProductName() ;
$str .=  "》的价格是 $price <br><br>";
echo $str;
?>

[!--infotagslink--]

相关文章

  • Java8处理List的双层循环问题

    这篇文章主要介绍了Java8处理List的双层循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-19
  • jquery中常用的SET和GET$(”#msg”).html循环介绍

    复制代码 代码如下: $(”#msg”).html(); //返回id为msg的元素节点的html内容。 $(”#msg”).html(”new content“); //将“new content” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content $(”...2013-10-13
  • Lua语言新手简单入门教程

    这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
  • 浅谈Java8 的foreach跳出循环break/return

    这篇文章主要介绍了Java8 的foreach跳出循环break/return,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-28
  • mybatis-plus  mapper中foreach循环操作代码详解(新增或修改)

    这篇文章主要介绍了mybatis-plus mapper中foreach循环操作代码详解(新增或修改),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-17
  • C#的循环语句集锦及案例详解

    这篇文章主要介绍了C#中的基本循环:while循环、for循环和foreach循环,大家都知道循环结构可以简化程序编码,更好地实现理想的效果,并结合案例给大家讲解,需要的朋友可以参考下...2020-06-25
  • python 实现循环定义、赋值多个变量的操作

    这篇文章主要介绍了python 实现循环定义、赋值多个变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • shell中的for循环用法详解

    这篇文章主要介绍了shell中的for循环用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-11
  • 解决vue-router路由拦截造成死循环问题

    这篇文章主要介绍了解决vue-router路由拦截造成死循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • c# 循环语句的使用方法

    这篇文章主要介绍了c# 循环语句的使用方法,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#线程入门教程之单线程介绍

    这篇文章主要介绍了C#线程入门教程之单线程介绍,本文讲解了什么是进程、什么是线程、什么是多线程等内容,并给出了一个单线程代码示例,需要的朋友可以参考下...2020-06-25
  • PHP安装threads多线程扩展基础教程

    一、下载pthreads扩展下载地址:http://windows.php.net/downloads/pecl/releases/pthreads二、判断PHP是ts还是nts版通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说...2015-11-24
  • JavaScript循环遍历的24个方法,你都知道吗

    这篇文章主要给大家介绍了关于JavaScript循环遍历的24个方法,文中对每种方法都给出了详细的实例代码,方便大家理解学习,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-15
  • Java8之Stream流代替For循环操作

    这篇文章主要介绍了Java8之Stream流代替For循环操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-19
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
  • Javascript循环删除数组中元素的几种方法示例

    这篇文章主要给大家介绍了关于Javascript循环删除数组中元素的几种方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2017-05-22
  • c#入门之循环语句使用详解(for循环、do/while)

    这篇文章主要介绍了c#入门之循环语句使用详解,有for循环和do/while的示例,需要的朋友可以参考下...2020-06-25
  • 如何检测JavaScript中的死循环示例详解

    这篇文章主要给大家介绍了关于如何检测JavaScript中死循环的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-31
  • Python While循环语句实例演示及原理解析

    这篇文章主要介绍了Python While循环语句实例演示及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-30
  • 解决vue中的无限循环问题

    这篇文章主要介绍了解决vue中的无限循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27