【发布时间】:2016-08-30 20:58:21
【问题描述】:
我想检测新数组中的旧/新值。
仅供参考,我正在使用 PHP。
我想以最少的编码来实现它,而不需要额外的 for 循环。
旧数组
$oldArr = [
0 => 1,
1 => 5,
2 => 4,
3 => 9
];
新数组
$newArr = [
0 => 1,
1 => 5,
2 => 6,
3 => 7
];
$newArr 应该如下所示。
期望的输出
Array
(
[0] => Array
(
[value] => 1
[action] => not changed
)
[1] => Array
(
[value] => 5
[action] => not changed
)
[2] => Array
(
[value] => 6
[action] => added
)
[3] => Array
(
[value] => 7
[action] => added
)
[4] => Array
(
[value] => 4
[action] => removed
)
[5] => Array
(
[value] => 9
[action] => removed
)
)
尝试过的代码
$removed = array_diff_key($old, $new);
$added = array_diff_key($new, $old);
$possiblyChanged = array_intersect_key($old, $new);
foreach ($possiblyChanged as $key => $value)
{
if ($new[$key] !== $value)
{
$changed[$key] = $new[$key];
}
}
【问题讨论】:
-
那么您为实现这一目标做了什么尝试?
-
@Epodax:我正在尝试用函数而不是循环来实现它,但我不知道用最少的编码来实现它,顺便说一句,我也编辑了我的答案。跨度>
-
$result = array_merge( array_map(function($value) { return ['value' => $value, 'action' => 'unchanged']; }, $unchanged), array_map(function($value) { return ['value' => $value, 'action' => 'added']; }, $added), array_map(function($value) { return ['value' => $value, 'action' => 'removed']; }, $removed) ); -
@Epodax:你有没有看到我更新的问题,我尝试了什么以及我想要什么以及如何实现?
标签: php arrays optimization