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);
?>