Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP联合运算符的输出令人费解_Php_Arrays - Fatal编程技术网

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()

这是预期的行为:

+运算符返回附加到左侧的右侧数组 阵列;对于两个数组中都存在的键 将使用左侧数组,并从 右侧数组将被忽略


那么你的期望是错误的。好吧,我的问题中有一个错误。你能告诉我为什么它跳过了第二个数组的前两个位置,跳转到字符串“三维”,字符串定义和二维发生了什么。这在函数的文档中有解释:双键不会被覆盖。这意味着如果密钥已经存在,则跳过第二个候选密钥。