PHP特定函数foreach遍历一二维数组

 更新时间:2016年11月25日 14:57  点击:1924
foreach遍历数组的好是可以不知道数组的长度从而读出数组的key,name出来了,在php的foreach中有两种方法,arr_name as $value 和arr_name as $key => $value了,这个是针对不同维数的数组的哦,下面来一起来看看吧。

foreach有两种用法:

一、

  foreach(arr_name as $value)  

  {     

        statement;  

   }

解析:arr_name是要遍历的数组名。每次循环,arr_name数组当前元素的值都被赋给$value,而且数组内部下标也要下移一个,也就是说下次循环得到的将是下一个元素

二、

foreach(arr_name as $key => $value)  

 {      

        statement;    

解析:与第一个的不同是,这个除了吧当前元素的值赋给$value外,每次循环当前元素的键值也会被赋给$key , 键值可能是下标或字符串。如row[0]=1中的"0”,row[id]="001"中的"id”.其中0与id都是键值

先来看第一个语句,这个语句比较简单,array_expression指的是一个数组表达式,as $val语句将顺序取得该数组的值并保存到$val变量中,此种方法只能取得数组内的值,而不能取得数组的下标索引值。例如:
 

 代码如下 复制代码
$myArray=array("1"=>"val1","2"=>"val2","3"=>"val3");
 
foreach($myArray as $val) {
    echo $val."<br />";
}
执行结果:
val1
val2
val3

再来看看第二种格式,第二种格式除了能像第一种格式一样得到数组内元素的值外,还能得到元素的索引值,并保存到$key变量中,如果数组的索引值未经过人工设定,则返回系统默认的设定值。
先看一个简单的一维数组:
 

 代码如下 复制代码
$myArray=array("1"=>"val1","2"=>"val2","3"=>"val3");
foreach($myArray as $key=>$val) {
    echo $key."=>".$val."<br />";
}
执行结果:
1=>val1
2=>val2
3=>val3

接下来我们再来看一个复杂一点的二维数组遍历,程序如下:
 

 代码如下 复制代码
$myArray=array(
    "1"=>array("11"=>"val11","12"=>"val12","13"=>"val13"),
    "2"=>array("21"=>"val21","22"=>"val22","23"=>"val23"),
    "3"=>array("31"=>"val31","32"=>"val32","33"=>"val33")
);
 
echo "<ul>";
foreach($myArray as $key=>$val) {
    echo "<li>".$key."</li>";
    //判断$val的值是否是一个数组,如果是,则进入下层遍历
    if (is_array($val)) {    
        echo "<ul>";
            foreach($val as $key=>$val) {
            echo "<li>".$key."=>".$val."</li>";
        }
        echo "</ul>";
    }
}
 
echo "</ul>";

执行结果:

<ul> 和 <li>是 标签,作用是显示个实心小圆点和空心小圆点。 由于上面的是一个二维数组,在第一次遍历后所得到的$val值将是一个数组,所以我在遍历中加了一个判断,以便进行二层数组遍历。
再通过一个实例解惑:
 

 代码如下 复制代码
$a = array("1"=>"语文","2"=>"数学","3"=>"英语");
$b = array("1"=>"95","2"=>"99","3"=>"92");
foreach($a as $key=>$value){
    echo $value;
    echo $b[$key]."<br>";
}
执行结果:
语文95
数学99
英语92

问题是为什么输出数组$b中的值要用$b[$key]而不是$b[$value]? why?
 

 代码如下 复制代码
$a = array("1"=>"语文","2"=>"数学","3"=>"英语");
上面这个和下面这个是完全一样的
 
$a[1]="语文";
$a[2]="数学";
$a[3]="英语";
我们输出上面的数组元素是怎么输出的呢? 肯定是
 
echo $a[1];
echo $a[2];
echo $a[3];

对不对?简单说foreach 它的格式是这样的
foreach(数组名 as 下标=>值)
下标也就是上面的$a[1],这里的1就是数组的下标! 到这你应该明白了,为什么是$a[$key]这样输出。

好了到这里关于php foreach就介绍完了,foreach只能遍历一二维数组了,如果是三维数组我们需要进行递归操作了。

PHP中数组函数有很多,我们要对数据进行合并与追加都只要使用相关的函数就可以完成了,下面给各位整理几个例子。

PHP合并数组我们可以使用array_merge()函数,array_merge()函数返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次追加。其形式为:

array array_merge (array array1 array2…,arrayN)

下面是一个PHP合并数组的例子:

 代码如下 复制代码

<?php
$fruits = array("apple","banana","pear");
$numbered = array("1","2","3");
$cards = array_merge($fruits, $numbered);
print_r($cards);
// 输出结果:
// Array ( [0] => apple [1] => banana [2] => pear [3] => 1 [4] => 2 [5] => 3 )
?>

用PHP追加数组,使用array_merge_recursive(),将两个数组合并在一起,注意,与array_merge()函数是不一样的,array_merge()的两个数组有重复项时会覆盖掉,而array_merge_recursive()则不会。array_merge_recursive()语法:


array array_merge_recursive(array array1,array array2[…,array arrayN])

下面是一个PHP追加数组的例子:

 代码如下 复制代码

<?php
$fruit1 = array("apple" => "red", "banana" => "yellow");
$fruit2 = array("pear" => "yellow", "apple" => "green");
$result = array_merge_recursive($fruit1, $fruit2);
print_r($result);
// 输出结果:
// Array ( [apple] => Array ( [0] => red [1] => green ) [banana] => yellow [pear] => yellow )
?>

现在apple 指向一个数组,由两个颜色值组成的索引数组,还有一种比较怪的做法就是合并数组

array_splice()语法格式为:
array array_splice ( array array , int offset[,length[,array replacement]])

例子

 代码如下 复制代码

<?php
$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
$subset = array_splice($fruits, 4);
print_r($fruits);
print_r($subset);
// 输出结果为:
// Array ( [0] => Apple [1] => Banana [2] => Orange [3] => Pear )
// Array ( [0] => Grape [1] => Lemon [2] => Watermelon )
?>

我们还可以使用可选参数replacement来指定取代目标部分的数组。请看下面的例子:

 代码如下 复制代码

<?php
$fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
$subset = array_splice($fruits, 2, -1, array("Green Apple", "Red Apple"));
print_r($fruits);
print_r($subset);
// 输出结果:
// Array ( [0] => Apple [1] => Banana [2] => Green Apple [3] => Red Apple [4] => Watermelon )
// Array ( [0] => Orange [1] => Pear [2] => Grape [3] => Lemon )
?>

下php中 运算符与表达式是一门非常有学问的知识点了,下面我整理了一些比较基本并且有用的 运算符与表达式例子了,希望这些例子能帮助到各位同学哦。

一、运算符的分类

1、按操作数分类

1.!true // 一元运算符
2.$a+$b // 二元运算符
3.true ? 1:0 // 三元运算符

2、按操功能分类

(1)算术运算符
1.+、-、x、/、%(取余)
(2)字符串运算符
1..  // 例如:$a = 'abc'.'efg';

(3)赋值运算符

1.= // 简单赋值
2.+=、-=、X=、/=、%=、.= // 复合赋值
3.++($a++、++$a)、 --($a--、--$a) // 递增递减
4.&($a = 1;$b = &a) // 引用赋值

(4)比较运算符

1.==、 ===(恒等于)、 !=、 !===、 <>(不等于)、 <、 >、 <=、 >=
(5)逻辑运算符
1.// 括号内的比括号外的优先级高
2.&&(and)、 ||(or)、 !(not)、 xor(异或)、
(6)位运算符
1.&(按位与)、 |(按位或)、 ~(按位非)、 ^(按位异或)、 <<(左位移)、 >>(右位移)

二、算术运算符

%取余,常见用法:1)整除运算 2)控制取值范围

实例:判断是否为闰年(四年一闰,百年不闰,四百年再闰)
1.// %会把两边的数转成整型后在整除
2.// %两边不能用小数或负数
3.if ((($year%4 == 0) && ($year%100 != 0)) || $year%400 == 0)
4.echo "闰年";
5.else
6.echo "平年";

三、赋值运算符

01.//先自身加10,然后赋值给自己,等价于 $a=$a+10
02.$a += 10;
03.
04.//前置递增递减,先递增递减再赋值
05.++$a
06.
07.//先赋值,再递增递减
08.$a++
09.
10.//实例
11.$a = 10;
12.$b = $a++
13.$c = --$b
14.结果:a=11 b=9 c=9

四、逻辑运算符

xor异或:相同为假(两个真或两个假=假),不同为真(一真一假=假)
Tips:注意与or区别,or两个真=真
逻辑运算符短路
1.1、&& //一个为假,则后面不作运算,一定为假
2.2、|| //一个为真,则后面不作运算,一定为真
3.
4.fopen ("test.php","r") or die("失败");

Tips:为运算符 & | 没有短路特性

五、位运算符

位操作:将整型转为32位二进制,字符串转为ANSCA码来处理

流程控制语句是任何程序中会碰到的一个条件判断语句了,下面本文章重点介绍php中流程控制分支结构基于语法与简单应用例子。

一、PHP流程控制概述

1、分支结果(条件结构)

//单路分支:
if (condition) { //花括号后可以没有分号;
    # code...
}

//双路分支
if (condition) {
    # code...
} else {
    # code...
}

//多路分支
if (condition) {
    # code...
} elseif(condition) { //elseif 可写成else if
    # code...
} else {
    # code...
}


2、switch 多路分支结构

判断范围用if结构,单个值用switch

switch (variable) { //变量用整型和字符串
    case 'value1': 
    case 'value2':  //可以有多个case
        # code...
        break;      //如果不加break,下一个case会继续执行
    case 'value3':
        # code...
        break;
    default:        //默认值,可有可无
        # code...
        break;
}

二、PHP循环语句

1、while 循环

while (condition) { //先判断条件再执行
    # code...
}


2、do while 循环

do { //先执行再判断条件
    # code...
} while (condition); //注意不要遗漏分号


3、for 循环

for ($i=0; $i < ; $i++) {  //一般用于计数,两个分号不能省略
    # code...
}

实例:99乘法表


for ($i=1; $i < 10; $i++) {

for ($ii=1; $ii <= $i; $ii++) {

echo "$ii X $i = ".$ii*$i.' ';

}

echo "<br>";

}

三、退出循环语句

//退出本次循环,下次循环也不再进行
break

//退出本次循环,下次循环继续,只能用于循环体内(for,while,do-while)
coninue

//完全退出程序
exit

//函数执行返回值,结束函数的语句
return


退出多层循环

break 1  // 退出当前循环
break 2  // 退出2层循环
continue 2

错误实例

$i = 0;
while ($i < 10){
    if ($i == 5)
       continue;
    echo "$i";
    $i++; //注意这里的i++不会被执行,会产生死循环
}

函数是一门程序中不可少的一个重要的东西,很多东西我们会做成函数这样可以方便重复调用了,下面本文章重点就是介绍函数php函数用法。

一、函数的声明
1、语法结构

 代码如下 复制代码

function 函数名 (参数列表)
{
    函数体; //可选
    返回值; //return可选
}

    参数列表用逗号隔开,勿遗漏$变量符号
    函数名不区分大小写,规则与变量一致
    函数调用才执行,可先调用后声明
    函数名不能重名,包括系统函数

2、函数调用

 代码如下 复制代码

function sum($x,$y) //形参:在声明函数时声明的参数
{
    // $x = 1; //如果在函数内对参数赋值,则会覆盖实参。
    // $y = 2;
    $sum = 0;
    $sum = $x + $y;
    return $sum; //执行到return函数结束,后面不再执行
}

sum();
sum(2,2); //实参:在调用函数时传递给形参的数值
echo sum(2,2); //通过return返回数据可作为值使用


二、函数中的变量
1、变量范围

    局部变量:函数内部声明与使用的变量
    全局变量:在函数外声明,脚本任何地方均可以使用

Tips:在PHP函数中使用全局变量,要通过global关键字将这个全局变量包含到函数中才能使用

 代码如下 复制代码

$a = 1;
$b = 2;
function demo($a = '')
{
    //global 须放在前面
    //global $a,$b global 可包含多个全局变量
    //$GLOBALS['a'] //声明全局变量 方法二
    global $a;
    $a += 5;
    echo $a;
}

demo();


2、PHP静态变量

    静态变量可以在同一个函数中多次调用中共用
    静态变量只能在函数或类中声明,不能在全局声明。

 代码如下 复制代码

function demo($a = '')
{
    static $a = 0; //定义静态变量
    $a++;
    echo "$a <br>";
}
demo(); //输出1
demo(); //输出2


3、变量函数

 代码如下 复制代码

$var = 'hello'; //变量名后面右括号,就寻找与变量值同名的函数
$var(); //等价于 hello();


三、函数分类及声明

1、函数分类

 代码如下 复制代码

//常规函数
bool copy(string source,string dest)

//带mixed,表示可以传任何类型的数据
bool chown(string filename,mixed user)

//带&参数的函数,这个参数只能是变量,变量值是动态的
//对数组进行排序,数组的索引保持和单元的关联
bool arsort ( array &$array [, int $sort_flags ] )
$fruits = array('a', 'c', 'b');
arsort($fruits);
var_dump($fruits);

//默认函数,即带[]中括号的函数,表示参数可选,若没有传值则使用默认值
//如果调用没有赋值,又没有初值则出现警告
function demo($a=1,$b=2)
{
    #code
}
demo();

//带有...参数的函数,表示可以传任意多个参数
//在数组开头插入一个或多个单元
int array_unshift ( array &$array , mixed $var [, mixed $... ] )

2、声明多个参数函数

 代码如下 复制代码

function Test()
{
    echo func_num_args();
}
Test('a','b','c');  // 3

func_get_arg():返回参数列表中的第N个参数

function Test()
{
    echo func_get_arg('1');
}
Test('a','b','c'); //b

使用实例

 代码如下 复制代码

function cls_mysql()
{
    $mysql = func_get_args();
    $conn = mysql_connect($mysql['0'], $mysql['1'], $mysql['2']);
}
cls_mysql('localhost:3306', 'root', '123456');

3、函数注释规范

 代码如下 复制代码
/**
 * 用用演示函数 //函数功能,决定是否使用
 *
 * @static
 * @access public
 * @param string $attributeName 属性名称 //函数参数,决定怎样调用
 * @return string //函数的返回值,决定调用后怎么处理
 */
public function demo($attributeName)
{
    $attributeName = 'abc';
    return $attributeName
}


四、Callback 回调函数

我们自定义一个函数A,但是我们不直接去调函数A,而是在函数B中去调用函数A,函数B通过接收函数A的名字和参数来实现对函数A的调用,函数A称为回调函数。

 代码如下 复制代码

function A($x,$y)
{
    return $x*$y;
}
function B($a,$b,$fun)
{
    return $a+$b+$fun($a,$b);
}
echo B(2,3,"A");


PHP回调函数的实现方法

php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持

 代码如下 复制代码

//mixed call_user_func_array 以数组的形式接收回调函数的参数
mixed call_user_func_array ( callable $callback , array $param_arr )
call_user_func_array('f1',array('A','B'));

//call_user_func的参数个数根据回调函数的参数来确定
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
call_user_func_array('f1','A','B');


实例:

 代码如下 复制代码

//普通全局函数
function f1($arg1,$arg2)
{
    echo $arg1."<br>".$arg2."<br>";
}

echo "通过call_user_func_array调用函数f1:<br>";
call_user_func_array('f1',array('A','B'));

echo "通过call_user_func调用函数f1:<br>";
call_user_func('f1','C','D');

//类
class myClass
{
    public $name;
    function show($arg1)
    {
        echo '参数名:'.$arg1."<br>";
        echo '对象中的成员名:'.$this->name;
        echo "<br>";
    }
    function show1($arg1,$arg2)
    { 
        echo $arg1."<br>".$arg2."<br>";
    }
    public static function show2($arg1,$arg2) 
    {
        echo $arg1."<br>".$arg2."<br>";
    }
}

echo "调用类中非静态成员函数,该成员函数中有this调用了对象中的成员:<br>";
$a = new myClass;
$a->name = 'F';
call_user_func_array(array($a,'show'),array('E'));

echo "调用类中非静态成员函数,该函数没有调用对象中的成员,没有this:<br>";
call_user_func_array(array('myClass','show1'),array('G','H'));

echo "调用类中静态成员函数:<br>";
call_user_func_array(array('myClass','show2'),array('I','J'));

五、内部函数

在函数内部再声明函数,目的是在函数内部调用,用来帮助外部函数完成一些子功能

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • 浅谈Java8 的foreach跳出循环break/return

    这篇文章主要介绍了Java8 的foreach跳出循环break/return,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-28
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30