首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP联合操作符输出是不可理解的

PHP联合操作符输出是不可理解的
EN

Stack Overflow用户
提问于 2017-11-04 18:09:42
回答 2查看 47关注 0票数 1

当我编写以下代码时,有人能解释为什么吗?

代码语言:javascript
复制
$arr = array("define", "two dimensional", "three dimensional");
$var = array("variables", "constant");
$allArray = $var + $arr;
print_r($allArray);

我得到以下输出:

代码语言:javascript
复制
Array
(
    [0] => variables
    [1] => constant
    [2] => three dimensional
)

但我以为会这样:

代码语言:javascript
复制
Array
(
    [0] => variables
    [1] => constant
    [2] => define
    [3] => two dimensional
    [4] => three dimensional
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-04 18:14:32

在手册中,数组联合操作符定义如下:

+操作符返回附加到左侧数组的右数组;对于两个数组中存在的键,将使用来自左侧数组的元素,而忽略来自右侧数组的匹配元素。

来源:http://php.net/manual/en/language.operators.array.php

因此,对于基本的数字索引数组,将只使用右边操作数(在您的问题中的$arr)中的“额外”值。这就是为什么你只看到三维的加入。

如果您想保留所有的值,则应该考虑使用array_merge。对于数字索引数组,它将保留(和重新索引)所有值。

有关差异的演示,请参见https://eval.in/893020

票数 3
EN

Stack Overflow用户

发布于 2017-11-04 18:15:34

这都是关于键的,请考虑下面的代码

代码语言:javascript
复制
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);

产出:

代码语言:javascript
复制
>===== 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"
}

你可以在这里看到它

http://sandbox.onlinephpfunctions.com/code/c0a08a0a31cf4c91ecba835ef86bf483751acda0

如您所见,使用+的工作方式类似于replace(),而不是merge()

这是预期的行为:

http://php.net/manual/en/language.operators.array.php

+操作符返回附加到左侧数组的右数组;对于两个数组中存在的键,将使用来自左侧数组的元素,而忽略来自右侧数组的匹配元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47113906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档