萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP數組合並函數(+)、array_merge、array_merge_recursive

PHP數組合並函數(+)、array_merge、array_merge_recursive

我在php學習在使用到最多的數據合並方法就是array_merge、array_merge_recursive函數了,當然還會少用到操作符(+)函數了,下面我來給大家整理一下這幾個函數的一些用法。

PHP中,有3種方法來進行數組合並:操作符(+)、array_merge、array_merge_recursive,其中前兩種方式為一維數組的合並,第三種為遞歸合並。
在說PHP的數組合並之前,先要明白,PHP的數組分為索引數組和關聯數組。索引數組是指沒有鍵值和鍵值為數字的數組,關聯數組是指鍵值為字符的數組。

下面說說操作符(+)和array_merge的區別:

1.當為索引數組時,合並相同鍵值的數組,操作符以最前面的值為合並後的結果,array_merge則是把相同鍵值的數組合並,並重新索引(不同鍵值的數組合並時,也會從0開始重新生成數字索引)。

1、“+”運算符
規則:
  當兩個數組的鍵名是數字鍵名或者字符串鍵名
  $c = $a + $b
  在$a後追加($b在$a中不存在的鍵名)鍵名和值
注意:
  1、不覆蓋,只是追加不存在的鍵名和對應的值
  2、鍵名不重新索引
  3、無論是全部數字鍵名還是混合,都只是追加鍵名和值,如果鍵名相同則不進行追加,即把最先出現的值作為最終結果返回
例1:數字鍵名

 代碼如下 復制代碼

$a = array(
    'a',
);
$b = array(
    'u',
);
$c = $a + $b;
var_dump($c);
 
output:
array(1) {
  [0]=>
  string(1) "a"
}
 例2:數字鍵名

$a = array(
    66=>'a',
);
$b = array(
    60=>'u',
    66=>'c'
);
$c = $a + $b;
var_dump($c);
 
output:
array(2) {
  [66]=>
  string(1) "a"
  [60]=>
  string(1) "u"
}
例3:字符鍵名

<?php 
$a = array(
    1=>'a',
    2=>'b',
    'c'=>'c',
    'd'=>'d',
);
$b = array(
    1=>'u',
    3=>'v',
    'c'=>'w',
    'd'=>'x',
    'y'=>'y',
    60=>'z',
);
$c = $a + $b;
var_dump($c);
?>
 
output:
array(7) {
  [1]=>
  string(1) "a"
  [2]=>
  string(1) "b"
  ["c"]=>
  string(1) "c"
  ["d"]=>
  string(1) "d"
  [3]=>
  string(1) "v"
  ["y"]=>
  string(1) "y"
  [60]=>
  string(1) "z"
}

 

2.當為關聯數組時,合並相同字符鍵值的數組,操作符合並規則是前面的覆蓋後面的,array_merge則是後面的覆蓋前面的。

例:

 代碼如下 復制代碼

$arr5 = array('a'=>'aaaa');
$arr6 = array('a'=>'bbbb');

var_dump($arr5+$arr6);
var_dump(array_merge($arr5,$arr6));
輸出:
array (size=1)
  'a' => string 'aaaa' (length=4)
array (size=1)
  'a' => string 'bbbb' (length=4)


array_merge() 將一個或多個PHP數組合並起來,一個數組中的值附加在前一個數組的後面。返回作為結果的數組。
如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。然而,如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。
如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引。

3.array_merge_recursive的合並規則和array_merge相同,只是array_merge_recursive支持多維數組的合並。

例:

 代碼如下 復制代碼

$a = array(

1=>'a',
2=>'b',
'c'=>'c',
'd'=>'d',

);

$b = array(
1=>'u',
3=>'v',
'c'=>'w',
'd'=>'x',
'y'=>'y',
60=>'z',

);

var_dump(array_merge_recursive($a,$b));

輸出:

array (size=8)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  'c' =>
    array (size=2)
      0 => string 'c' (length=1)
      1 => string 'w' (length=1)
  'd' =>
    array (size=2)
      0 => string 'd' (length=1)
      1 => string 'x' (length=1)
  2 => string 'u' (length=1)
  3 => string 'v' (length=1)
  'y' => string 'y' (length=1)
  4 => string 'z' (length=1)

copyright © 萬盛學電腦網 all rights reserved