yii2 关于helper类 ArrayHelper::merge()方法的介绍

yii\helpers\ArrayHelper::merge()

在web/index.php入口文件就可以看到这个方法:

譬如:

$config = yii\helpers\ArrayHelper::merge(
    # yii2  common config
  require(__DIR__ . '/../../common/config/main.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    # yii config
  require(__DIR__ . '/../config/main.php'),
  require(__DIR__ . '/../config/main-local.php'),
  # yii fecshop config
  require(__DIR__ . '/../../vendor/fancyecommerce/fecshop/config/fecshop.php'),
  # yii fecshop appfront config
  require(__DIR__ . '/../../vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php'),
  # third people  config
  
  # user second develop config.
  
  require(__DIR__ . '/../config/fecshop_local.php')
    

);
$config['homeUrl'] = $homeUrl;
$application = new yii\web\Application($config);

需要注意的是ArrayHelper::merge方法,合并后的数组结果是什么:

下面通过例子讲解:

$arr1 = [
  'name' 	=> 'terry',
  'age'	=>	15,
  'friend'=> [
    'zhangsan','lisi'
  ],
  'work' =>[
    'aa'	=> 11,
    'bb'	=> ['aa','bb'],
  ],

];


$arr2 = [
  'name' 	=> 'water',
  'age'	=>	22,
  'friend'=> [
    'zhangsan','wangwu'
  ],
  'work' =>[
    'cc'	=> ['77','bb'],
    'aa'	=> 22,
  ],

];


$arr3 = yii\helpers\ArrayHelper::merge($arr1,$arr2);

$arr3的值为:

array(4) { [“name”]=> string(5) “water” [“age”]=> int(22) [“friend”]=> array(4) { [0]=> string(8) “zhangsan” [1]=> string(4) “lisi” [2]=> string(8) “zhangsan” [3]=> string(6) “wangwu” } [“work”]=> array(3) { [“aa”]=> int(22) [“bb”]=> array(2) { [0]=> string(2) “aa” [1]=> string(2) “bb” } [“cc”]=> array(2) { [0]=> string(2) “77” [1]=> string(2) “bb” } } }

 

可以看到这个数组的作用:

1.如果key是数字,那么value就会进行数组合并,如果值相同,不会覆盖,会出现两个相同值的数组元素,譬如[1,2]和[2,3]通过merge函数合并的结果为[1,2,2,3].

2.如果数组的key不是数字,而且数组里面的value不是数字,则value会被覆盖掉

譬如[‘aa’ => ‘xxx’]和[‘aa’=>’yy’]  merge函数后的结果为[‘aa’=>’yy’],

3.如果数组的key不是数字,而value是数组(数组的key是数字),则会进行数组合并。

4.如果数组的key不是数字,而value是数组(数组的key不是数字),则value数组中的key回合第二个步骤那样处理。

 

具体可以自己琢磨,因此在使用这个方法的时候,要想key覆盖,key一定要用字符串,就和变量定义一样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注