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了。
就是这样,简单一说吧。如果有什么不懂的可以在评论区留言,我会在看到的第一时间进行回复的,当然,如果有问题或者不同的见解,也欢迎指出,谢谢。

本文作者:博主:     文章标题:php foreach循环,索引数组
本文地址:https://zjzdmc.top/jsfx/76.html     
版权说明:若无注明,本文皆为“Datehoer的Blog-个人博客-技术分享”原创,转载请保留文章出处。
最后修改:2021 年 04 月 20 日 08 : 25 AM
如果觉得我的文章对你有用,请随意赞赏