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