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

当前位置:主页 > 技术分享 > php foreach循环,索引数组

php foreach循环,索引数组

浏览: 作者:Datehoer 发布日期:2020-12-04 16:45:34 来源: 原创
php中的索引数组是什么呢?它该如何遍历。
php中foreach循环是什么?为何它能够遍历索引数组呢?欢迎收看本期php课程之php中的foreach循环以及索引数组。

哈哈,上面的是随便写的啦。
我们先回归正常模式,首先呢,我们先了解一下php中的数组吧,数组,其实我觉得一开始应该是没有的,大概率一开始只有数字和字符串,然后再有的别的,当然,我随便瞎扯的。

数组我认为其实就是为了方便储存,比如说我们储存一下手机号,如果没有数组的话,那就需要一个变量名后面跟一个手机号吧,总不能我定义一个$shoujihao ='11111,3333,1111,5555,111'吧,是不是总不能这么储存,而我们如果每一个手机号都单独命名一个变量的话,真的是非常麻烦的,特别是我这种没文化的,起名字起的非常的水,只会shoujihao1,shoujihao2来起名。所以数组就出现了,我们只需要把需要储存的同一类型的数据储存到同一个数组就行了,之后利用下标就可以调用了。

简单的举一个小例子:

<?php
$xlz=array("123","456","789"); 
echo $xlz[0] . ", " . $xlz[1] . " , " . $xlz[2] . ".";
?>

//123, 456 , 789.


结果其实不用看也知道,我们通过下标就能把数据提取出来了,比之前方便的多很多,毕竟我们这样只需要记一下下标值就行了。
然后呢,切入正题,说一下我们的主角,索引数组。
这是个什么东西呢?我觉得这就是因为其实这个数组还是不是很明显,想要把数据表现得更加明显一些。不过其实我觉得这个还不如用字典呢,字典这个东西也是很厉害的呢。

索引数组 索引数组 索引数组

索引数组其实跟字典类似,就是把普通数组中的下标给换成了自定义的下标而已,然后通过自定义下标的值来进行调用
索引数组也简单的举一个小例子,今天上课老师举的,至于为什么不我不自己举一个,是因为水平有限!

$color = array('one'=>'red','two'=>'blue','three'=>'black','four'=>'white');
这就是一个简单的定义索引数组了,而我们要怎么把数据提取出来呢?
当然还是跟前面的一样啦,只不过把数字换成了我们自定义的下标而已。

echo $color['one']
//red

简单的输出一个值,当然,一定要记住,既然你自定义下标了,那么需要加一下引号,当然,你自己定义的时候加的一定要加。
接着就说一下我们另一个主角咯,foreach了。
我们都知道,既然储存了数据,那么肯定是要提取出来的,而我们之所以用数组我觉得大概率就像上面所说的,储存大量相同类型的数据,所以这就离不开for循环的遍历了,毕竟提取大量数据肯定还是用循环遍历出来舒服啊。
我们普通的遍历,只需要设置初始值为0即可提取所有的数据了,那我们的索引数组呢?

foreach  foreach  foreach

我们通过foreach来循环遍历索引数组中的值,就直接使用前面的例子了。
$color = array('one'=>'red','two'=>'blue','three'=>'black','four'=>'white');
foreach($color as $key =>$vaule){
        echo '$key'.$key.'$vaule'.$vaule.'<br>';
    }
可以看到,我们的()内的值跟for是不同的,这是必然的,哈哈。
简单讲解一下,$color这个是数组名,然后as是必须的,而后面的$key =>$vaule跟我们定义的时候是不是很像,所以其实$key就是前面的下标值(突然想起来这个应该叫键值吧),$vaule这个就是后面的储存的值了,然后我们看下结果再说重点。

$keyone$vaulered
$keytwo$vauleblue
$keythree$vauleblack
$keyfour$vaulewhite

结果就是像上面这样,一个键跟一个结果。
不过不要误会,$key和$vaule不是规定的,这个是随意的,你想叫什么名就叫什么名
然后除了这种,其实还有别的遍历的方法,当然,都是foreach了。
还是举我们前面的例子吧,主要是懒得想别的例子了。

$color = array('one'=>'red','two'=>'blue','three'=>'black','four'=>'white');
    foreach($color as $vaule){
        echo $vaule.'<br>';
    }
//red
blue
black
white

很容易理解,就是得到了我们想要的值。
最后,再讲一个重点吧,&这个符号相信大家都不陌生,c语言经常要用到,说实在的我一开始确实没想到这个有啥用,为啥子会用在php的foreach循环上。不知道正在阅读的你是否也懵逼了呢?
下面让我先上两个小例子,分别是加了&和不加&的同一个遍历。


$arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
        $value = $value * 2;
        echo $value;
    }
$arr = array(1, 2, 3, 4);
    foreach ($arr as $value) {
        $value = $value * 2;
        echo $value;
    }

很容易得到结果,都是2,4,6,8。可能有人会问了,既然都是2468,那他们有什么特别之处呢?
只需要在后面加上一个简单的数组输出,就能看出区别了。

var_dump($arr);
我们加上var_dump($arr);这个后,再看结果的话,会发现加了&的数组输出还是2468,而我们不加的,数组又变回原本的了,这是为什么呢?
实际上,foreach是不推荐在循环内修改$vaule的值的,这是因为foreach循环依赖内部数值指针,如果修改可能就会发生意外,所以上面就出现意外了。
举一个我看到的例子:

$x = array("a", "b", "c");
foreach ($x as &$value)
{
    echo $value." ";
}
echo "<br/>";
foreach ($x as $value)
{
    echo $value." ";
}
这一个,理论上都应该输出的是a b c而第二个循环输出的却是a b b这是为什么呢?
还是那句话,因为它依赖他,所以他修改的话,以来他的它就会发生意外。
简单来说,我们如果修改了值,那么实际上应该得到的结果就是我们修改出来的值,而因为foreach就是引用赋值,把值引用了然后再修改,就相当于没修改了,而我们加上了&这个的话,就会使得修改变成真实的了。
其实第一种和第二种还是有区别的,第二种再说一下,就是我们第一个foreache循环的时候,已经把值给修改了,给$vaule修改了,然后我们下面调用的时候会受到影响,也就是说数组最后一个元素的 $value引用在 foreach循环之后仍会保留,所以后面在使用$vaule的话就会受到影响了。
而第一种就是因为引用问题了。
如果想要避免这些意外的话,最好的办法就是不用!其次就是使用foreach循环的时候,不修改其中的值,然后再就是假如说我们要连续用几次foreach循环的话,那么最好把后面的变量名改一下,前面用$vaule的话,后面不要使用$vaule了。
就是这样,简单一说吧。如果有什么不懂的可以在评论区留言,我会在看到的第一时间进行回复的,当然,如果有问题或者不同的见解,也欢迎指出,谢谢。



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

文章推荐

热门标签

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