php数组循环赋值
❶ php中如何利用foreach循环将一个多维数组赋值到另一个多维数组
PHP 多维数组的赋值与一维数组原理一样
例如:
<?php
$array = array(array('a','b'),array('c','d'));
$array1 = array(array('a1','b1'),array('c1','d1'));
foreach($array1 as $value){
$array[] = $value;
}
?>
实际上原理是一样的,多维数组就是复杂一些。
不过,对于多维数组的处理,逻辑思维得更强一些。
❷ php数组的赋值问题
您好,您这样:
foreach($arr as $k=>$v){
//这个的意思是 循环数组$arr,把当前循环的下标(键名)赋值给$k,当前循环的数组元素赋值给$v
//然后你改变的是$v的值,这就类似于
// $a = 1;
// $b = $a;
// $a = 2;
// echo $b;
// 你改变了$a的值,但$b还是原来的1;
}
//所以你这个可以这样修改
foreach ($ss as $k=>$v) {
if($v['two'] == "3"){
$ss[$k]['two'] = 1000;
//或者
//$v['two'] = 1000;
//$ss[$k] = $v;
}
}
print_r($ss);
❸ PHP语言中 foreach 遍历数组用法
第一种格式遍历给定的 $a 数组。每次循环中,当前单元的值被赋给 $b 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
自 PHP 5 起,可以很容易地通过在 $b 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。例如:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>
var_mp($arr);#打印$arr看下你就明白了,打印之后你再把&去掉,运行再打印,两次比较就清楚
第二种就是把原$arr中的每个单元重新赋值,上面那样写已经很清楚了,不明白的话,就到网上下载一个php手册,好好看看
❹ PHP怎样用循环将10个数字赋值给一个数组
利用PHP对数组赋值时下标变量会自动递增的特点,可以很方便用循环将数据存入一个数组。
例如:$arr[] = 'a'; 这条语句会将字符a存入数组变量$arr中,如果$arr不存在则会新建一个;
若已存在,则将$arr数组的下标变量递增1后存入字符。
也就是说,如果已有$arr[0]='a', 那么执行 $arr[] = 'b'; 后,数组其实是进行了$arr[1] = 'b' 的操作。
❺ php的foreach使用&引用数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留
你好!
这段代码中有2个foreach循环。产生这个结果的原因是引用变量没有进行释放造成的。
1.第一个foreach循环,使用了&$value的写法,我们理解为指针变量,当循环结束后,
它指向的是数组中最后一个元素,即$arr[5],此时它的值为12.
2.第二个foreach循环,相当于每次循环都给$value进行赋值,由于$value的引用没有释放,
那么就是间接的为arr[5]进行赋值,它每次的循环结果如下:
2,4,6,8,10,2
2,4,6,8,10,4
2,4,6,8,10,6
2,4,6,8,10,8
2,4,6,8,10,10
很好解决,就是在第一次foreach循环结束后,释放$value的引用,即unset($value);
希望对你有帮助!
❻ PHP foreach 遍历修改值的正确方法与踩坑!
基础使用:foreach在PHP中提供了一种简洁的遍历数组的方式。它仅适用于数组和对象。尝试应用于其他数据类型的变量或未初始化的变量将导致错误信息。
使用foreach时,有两种格式进行遍历。第一种格式直接遍历给定的array_expression数组。每次循环中,当前单元的值被赋给$value,同时数组内部的指针向前移一步,以获取下一个单元。第二种格式与第一种类似,但同时还会将当前单元的键名赋给变量$key。
PHP的数组实质上是一个键值对形式的映射。在不指定key的情况下,如上代码中的$a变量就是只定义了$value而没有定义$key的数组,数组的下标分别为0、1、2,对应的值分别为2、4、8。
$b变量定义了$key和$value,说明在PHP中数组下标可以是自定义的。如果未定义下标,则默认从0开始计数数组下标。
这就是使用foreach对PHP数组进行遍历的方法。若要在遍历的同时修改数组中的值,应这样做:
注意,在$value变量前添加了&符号,以将遍历到的值的引用赋给$value。如果不添加&,赋值操作将无效。
使用此方法后,数组中的值将变为20、40、80。
使用&后,继续遍历$a查看值,结果为:
如果不使用unset()销毁该引用,则输出结果为:
为什么会出现这种情况?我们将分步解析整个过程:
循环1-1:由于$v是一个引用,因此$v = &$a[0],$v = $v * 10相当于$a[0] * 10。此时,$a = [20, 4, 8]。
循环1-2:$v = &$a[1],$v = $v * 10相当于$a[1] * 10。此时,$a = [20, 40, 8]。
循环1-3:$v = &$a[2],$v = $v * 10相当于$a[2] * 10。此时,$a = [20, 40, 80]。
循环2-1:隐含操作$v = $a[0]被触发,由于$v仍是$a[2]的引用,相当于$a[2] = $a[0]。此时,$a = [20, 40, 20]。
循环2-2:$v = $a[1],此时$v仍是$a[2]的引用,即$a[2] = $a[1]。此时,$a = [20, 40, 40]。
循环2-3:$v = $a[2],此时$v仍是$a[2]的引用,即$a[2] = $a[2]。此时,$a = [20, 40, 40]。
为解决此问题,PHP官方文档建议使用unset()销毁最后一个元素的引用。
遇到问题时,优先查找官方文档,这很可能直接解决问题。当然,如果这篇白话解读解决了你的问题,请点个赞吧!
❼ php foreach 数组赋值
<?php
//代码本地已运行过
$arr=array(1,2,2,4);
$uniq_arr
=
array_unique($arr);//第一步先去重,取得最外部需要循环的数组
$i
=
0;
foreach($uniq_arr
as
$key=>$val){//循环去重后的数组
foreach($arr
as
$k=>$v){//循环原生数组
if($key
!=
$k){//判断两次的key是否相等,array_unique,去重后的数组key是不变的
if($val
==
$v){
if(is_array($new_arr[$i])){//判断是否已经是个数组,是就直接追加
array_push($new_arr[$i],$v);
}else{//不是就拼接后再追加
$k_arr
=
array($new_arr[$i]);
array_push($k_arr,$v);
$new_arr[$i]
=
$k_arr;
}
}
}else{//如果key相等直接赋值给新数组
$new_arr[$i]
=
$val;
}
}
$i++;
}
print_r($new_arr);
?>