PHP联合运算符的输出令人费解
当我编写以下代码时,谁能解释一下原因:PHP联合运算符的输出令人费解,php,arrays,Php,Arrays,当我编写以下代码时,谁能解释一下原因: $arr = array("define", "two dimensional", "three dimensional"); $var = array("variables", "constant"); $allArray = $var + $arr; print_r($allArray); 我得到以下输出: Array ( [0] => variables [1] => constant [2] => thr
$arr = array("define", "two dimensional", "three dimensional");
$var = array("variables", "constant");
$allArray = $var + $arr;
print_r($allArray);
我得到以下输出:
Array
(
[0] => variables
[1] => constant
[2] => three dimensional
)
但我期待着:
Array
(
[0] => variables
[1] => constant
[2] => define
[3] => two dimensional
[4] => three dimensional
)
数组联合运算符在手册中定义如下: +运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而忽略右侧数组中的匹配元素 资料来源: 因此,对于基本的数字索引数组,将只使用右侧操作数(
$arr
)中的“额外”值。这就是为什么你只看到三维添加的原因
如果希望保留所有值,则应改为使用。对于数字索引数组,它将保留(并重新索引)所有值
参见差异。
< P>这是关于键的考虑下面的代码< /P>echo str_pad('>===== Union', 60, '=')."\n";
$arr = array("define", "two dimensional", "three dimensional");
$var = array("variables", "constant");
$allArray = $var + $arr;
var_dump($allArray);
echo str_pad('>===== Union With Assoc', 60, '=')."\n";
$arr = array('one'=>"define", 'two'=>"two dimensional", 'three' => "three dimensional");
$var = array('four' => "variables", 'five' => "constant");
$allArray = $var + $arr;
var_dump($allArray);
echo str_pad('>===== Replace ', 60, '=')."\n";
$arr = array("define", "two dimensional", "three dimensional");
$var = array("variables", "constant");
$allArray = array_replace($var,$arr);
var_dump($allArray);
echo str_pad('>===== Replace With Assoc', 60, '=')."\n";
$arr = array('one'=>"define", 'two'=>"two dimensional", 'three' => "three dimensional");
$var = array('four' => "variables", 'five' => "constant");
$allArray = array_replace($var,$arr);
var_dump($allArray);
echo str_pad('>===== Merge ', 60, '=')."\n";
$arr = array("define", "two dimensional", "three dimensional");
$var = array("variables", "constant");
$allArray = array_merge($var,$arr);
var_dump($allArray);
产出:
>===== Add==================================================
array(3) {
[0]=>
string(9) "variables"
[1]=>
string(8) "constant"
[2]=>
string(17) "three dimensional"
}
>===== Add With Assoc=======================================
array(5) {
["four"]=>
string(9) "variables"
["five"]=>
string(8) "constant"
["one"]=>
string(6) "define"
["two"]=>
string(15) "two dimensional"
["three"]=>
string(17) "three dimensional"
}
>===== Replace =============================================
array(3) {
[0]=>
string(6) "define"
[1]=>
string(15) "two dimensional"
[2]=>
string(17) "three dimensional"
}
>===== Replace With Assoc===================================
array(5) {
["four"]=>
string(9) "variables"
["five"]=>
string(8) "constant"
["one"]=>
string(6) "define"
["two"]=>
string(15) "two dimensional"
["three"]=>
string(17) "three dimensional"
}
>===== Merge ===============================================
array(5) {
[0]=>
string(9) "variables"
[1]=>
string(8) "constant"
[2]=>
string(6) "define"
[3]=>
string(15) "two dimensional"
[4]=>
string(17) "three dimensional"
}
你可以在这里看到
正如您所看到的,使用+
类似于replace()
而不是merge()
这是预期的行为:
+运算符返回附加到左侧的右侧数组
阵列;对于两个数组中都存在的键
将使用左侧数组,并从
右侧数组将被忽略
那么你的期望是错误的。好吧,我的问题中有一个错误。你能告诉我为什么它跳过了第二个数组的前两个位置,跳转到字符串“三维”,字符串定义和二维发生了什么。这在函数的文档中有解释:双键不会被覆盖。这意味着如果密钥已经存在,则跳过第二个候选密钥。