【问题标题】:PHP array_merge not workingPHP array_merge 不起作用
【发布时间】:2016-11-06 20:16:06
【问题描述】:

使用 PHP。 我有这个键和值的数组 1:

$array_1 = array(
(more values)
'propub_cost_max' => 5,
'propub_cost_min' => 0.5,
'average_calc_last' => '-1 Months',
'propub_qtd_first_offer' => 4
);

和数组 2:

$array_2 = array(
'propub_cost_max' => 20,
'propub_cost_min' => (no value),
'average_calc_last' => (no value),
'propub_qtd_first_offer' => (no value)
);

我想将数组 2 与数组 1 合并,所以我这样做了:

$result = array_merge($array_2, $array_1);

但结果是:

$result = array(
(more values)
'propub_cost_max' => 5,
'propub_cost_min' => 0.5,
'average_calc_last' => '-1 Months',
'propub_qtd_first_offer' => 4
);

propub_cost_max 键的值应该是 20,对吧?

这个想法是保持一些值,如果有任何值,则替换值不同的地方,当然。 我认为 array_merge 应该可以工作,但是...

谢谢大家。

【问题讨论】:

  • 你有一个} 而不是括号。
  • "如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个。" php.net/manual/en/function.array-merge.php。在你的情况下 array_1 是后者
  • 谢谢@TheValyreanGroup

标签: php arrays array-merge


【解决方案1】:

"如果输入数组有相同的字符串键,那么后面的值 因为那个键会覆盖前一个。”。在你的情况下 array_1 是 后者。

nogad

(链接到array_merge

还有

你有一个 } 而不是括号。

正如TheValyreanGroup 所说。

这两个都是绝对正确的。所以

$result = array_merge($array_1, $array_2); 

将解决您的问题。值被交换,因此$array_2 现在将覆盖$array_1 中的值。

为了解决您想要更新 一些 值的整体问题,而不知道要保留哪些值和哪些条件,我们简化为不使用空值覆盖值,所以:

$array_2 = array_filter($array_2); //clears empty values
$result = array_merge($array_1, $array_2); // as before. updates non-empty new values.

【讨论】:

  • }显然是复制错误,否则脚本甚至不会运行,他根本不会得到任何结果。
  • 好吧,它会解决这个测试用例中的问题,但在一般情况下,期望的行为大概是 max 获得两个值中的较大者,而不是两个值中的第二个(即使交换它们这里有帮助)。
  • @Barmar 好吧,是的,但我认为仍然值得指出的是,因为拼写错误通常是导致错误的关键,并且有拼写错误习惯(并且没有发现和纠正错误)的用户会有很多自己无法解决的代码问题。
  • 看看我是如何从其他人的评论中生成答案的
  • @Martin 很喜欢你,但我对 PHP 的了解不够好,无法按元素对其进行编码,因此如果键包含 min 一个选择两个值中较小的一个(假设两者都存在) ,如果它包含最大值,则选择较大的,否则选择平底船。
【解决方案2】:

这会解决你的问题

array_merge_recursive($array_1, $array_2);

【讨论】:

  • 干得好。那么为什么会这样呢?有什么区别?
  • array_merge 如果键名匹配,则将新旧值替换为新值。但是array_merge_recursive 将它们放在一个大数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多