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一定要用字符串,就和变量定义一样。