Datehoer的博客
我本将心向明月,奈何明月照沟渠
Datehoer的博客

当前位置:主页 > 技术分享 > php 常用数组函数有哪些?

php 常用数组函数有哪些?

浏览: 作者:Datehoer 发布日期:2020-12-10 12:53:40 来源: 原创
php中,一些函数是通过利用数组的指针来进行操作的。今天简单谈一下数组中的指针操作函数。
今天其实写这篇文章,是为了记录一下自己的一些疑惑以及自己的解答罢了。
大多数人都应该直到,php中指针操作函数有7个,分别是current()key()next()prev()each()end()reset()但是实际上随着php的版本更新,其中有的方法已经不适用最新版的php了。

关于each()

比如说each(),这个函数我其实看到的第一眼就觉得有些眼熟,这个不就跟之前说的那个foreach很像么,如果不知道foreach可以看这篇foreach循环的文章
然后在看一下对each()的描述。

获取数组中当前的键值对,并将数组指针向前移动一步

感觉其实比不明白什么意思,实际上这个就是类似于一个遍历了,获取这个数组中下标为0的元素的所有的值,下标和值以及对应的数值都会被获取到。
简单举一个例子,先说明前面的获取数组当前的键值对。

<?php
header("Content-Type:text/html;charset=utf-8");
$array = array("php基础示例"=>'php',"asp基础实例"=>'asp',"jsp基础实例"=>'jsp',"php函数大全"=>'phph');
echo "<pre>";
print_r(each($array));
echo "</pre>";
使用pre这个html标签是为了保留格式,要不然出现的结果其实还是有点丑的,具体可以自己尝试一下。
/*Array
(
    [1] => php
    [value] => php
    [0] => php基础示例
    [key] => php基础示例
)*/
首先其实最容易看到的就是key和value了,这个是相当于是索引形式,而0,1则类似于关联形式。
这个就是获取键值对了,那么向前移动一步是什么意思呢?
我们其实只需要再加一下print_r(each($array))就能看到效果了

<?php
header("Content-Type:text/html;charset=utf-8");
$array = array("php基础示例"=>'php',"asp基础实例"=>'asp',"jsp基础实例"=>'jsp',"php函数大全"=>'phph');
echo "<pre>";
print_r(each($array));
echo "</pre>";
echo "<pre>";
print_r(each($array));
echo "</pre>";
/*Array
(
    [1] => php
    [value] => php
    [0] => php基础示例
    [key] => php基础示例
)
Array
(
    [1] => asp
    [value] => asp
    [0] => asp基础实例
    [key] => asp基础实例
)*/
可以看到,虽然都是一样的代码,但实际上内在的内容已经不同,这是因为数组内的指针并不相通了,这就是向前移动一步,实际上是相当于向右移动一步。
而这个each一般是用在了循环上,循环遍历一下索引数组,自我猜测应该是在没有foreach循环的时候循环索引数组使用的方法。

<?php
header("Content-Type:text/html;charset=utf-8");
$array = array("php基础示例"=>'php',"asp基础实例"=>'asp',"jsp基础实例"=>'jsp',"php函数大全"=>'phph');
while(list($a,$b) = each($array)){
echo "{$a}=>{$b}";
}
/*php基础示例=>phpasp基础实例=>aspjsp基础实例=>jspphp函数大全=>phph*/
轻松得到数组的遍历结果。
那么接下来讲一下为什么要废弃这个函数,说白了我认为其实还是因为有点小麻烦,再加上已经有了foreach了,所以就把它给废弃了。
在php7.2以上的版本运行会发出警告,但是还是可以得到结果。

Q A
PHPUnit version 6.0.0
PHP version 7.2.0RC6
Installation Method Composer

Running PHPunit on PHP 7.2 results in a deprecated warning:

PHP Deprecated:  The each() function is deprecated. This message will be suppressed on further calls in /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/src/Util/Getopt.php on line 39
PHP Stack trace:
PHP   1. {main}() /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/phpunit:0
PHP   2. PHPUnit\TextUI\Command::main() /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/phpunit:53
PHP   3. PHPUnit\TextUI\Command->run() /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/src/TextUI/Command.php:135
PHP   4. PHPUnit\TextUI\Command->handleArguments() /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/src/TextUI/Command.php:146
PHP   5. PHPUnit\Util\Getopt::getopt() /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/src/TextUI/Command.php:291
PHP   6. each() /home/travis/build/spatie/laravel-binary-uuid/vendor/phpunit/phpunit/src/Util/Getopt.php:39
所以其实现在还是别使用each了,循环遍历的话,还是用foreach吧。

关于其余的函数

而其余的几个函数其实都很简单。
我们可以简单看一个图。

php数组指针函数
我们数组的初始指针是在1的位置,但是它的下标值为0,而我们使用函数的时候,下标值根据函数的作用发生改变,比如说前面的each(),使用一次each(),那么指针就会+1,所以才会出现上面两次输出each()的话,结果不同,
而我们的next()和prev()就是如此,一个+1一个-1而end()和reset()则是重置为0或者变成最后一个。
没有什么难度应该,说一个小知识点
如果我们在指针为0的时候使用prev()或者在最后的位置使用next()的话,会得到false,这是因为我们如果在头/尾使用向前或下一个的时候,并没有值了,所以返回false。
这就是为什么each()可以遍历数组的原因了,因为我们使用while循环,然后设置条件即可,如果到结尾的时候再下一步的话,就会返回false,而我们的while循环就会停下了。


关于while each()循环可以看上面的那串代码,应该是没有什么难度的。
如果有什么不懂的,可以在评论区留言,我会在看到的第一时间进行回复的。

版权:本文由Datehoer原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接本文链接:https://zjzdmc.top/jsfx/85.html。

文章推荐

热门标签

返回顶部
下面为相关推荐
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!