php-如何列出两个数组之间的差异
我需要列出更新数组后的差异:php-如何列出两个数组之间的差异,php,laravel,Php,Laravel,我需要列出更新数组后的差异: $current = [1, 2, 3]; $new = [3, 4, 5]; 列表示例: - number 1 removed - number 2 removed - number 3 keep - number 4 added - number 5 added 如何在PHP/Laravel上执行此操作?使用解决 $fullDiffs = array_merge(array_diff($current, $new), array_diff($new,
$current = [1, 2, 3];
$new = [3, 4, 5];
列表示例:
- number 1 removed
- number 2 removed
- number 3 keep
- number 4 added
- number 5 added
如何在PHP/Laravel上执行此操作?使用解决
$fullDiffs = array_merge(array_diff($current, $new), array_diff($new, $current));
foreach($fullDiffs as $i => $id){
if(in_array($id, $current) && in_array($id, $new)){
// keep it
}
if(in_array($id, $current) && !in_array($id, $new)){
// remove it
}
if(!in_array($id, $current) && in_array($id, $new)){
// add it
}
}
不同的方法
$current = [1, 2, 3];
$new = [3, 4, 5];
//initial variables
$list = [];
const ADDED = 1;
const KEPT = 2;
const DELETED = 3;
const STATUSES = array(
ADDED => 'added',
KEPT => 'kept',
DELETED => 'deleted',
);
//populate $list array with elements of your old/new arrays with corresponding action performed
$list = array_fill_keys(array_diff($new, $current), ADDED);
$list += array_fill_keys(array_intersect($current, $new), KEPT);
$list += array_fill_keys(array_diff($current, $new), DELETED);
//you can sort your array here
ksort($list);
//output actions in your array
foreach ($list as $number => $action) {
printf("- number %d %s\n", $number, STATUSES[$action]);
}
输出:
- number 1 deleted
- number 2 deleted
- number 3 kept
- number 4 added
- number 5 added
number 1 removed.
number 2 removed.
number 3 kept.
number 4 added.
number 5 added.
由于这看起来与Tajni的方法类似,因此这里有一个替代的单行程序(没有键排序):
利用并执行一些迭代来显示所需的文本。您可以将切换减少为如下内容:printf(“编号%d%s”,$number,[ADDED=>'ADDED',keep=>'keep',DELETED=>'DELETED'][$action])代码>@Progrock,没错。谢谢你的建议!这里的方法与Tajni之前的答案几乎相同。
number 1 removed.
number 2 removed.
number 3 kept.
number 4 added.
number 5 added.
<?php
foreach (
array_replace(
...array_map(
'array_fill_keys',
[$current, $new, array_intersect($current, $new)],
['removed', 'added', 'kept']
)
)
as $n => $outcome)
{
echo "number $n $outcome.\n";
}