我有两个数组,比如
Array
(
[0] => Array
(
[id] => 1
[controller] => users
[action] => index
)
[1] => Array
(
[id] => 1
[controller] => users
[action] =>
)
[2] => Array
(
[id] => 1
[controller] => users
[action] => login
)
)
Array
(
[0] => Array
(
[id] => 1
[controller] => users
[action] => index
)
[1] => Array
(
[id] => 1
[controller] => users
[action] =>
)
[2] => Array
(
[id] => 1
[controller] => users
[action] => logout
)
)
如果在第二个数组中找到匹配项(基于键['controller']&& ['action']),我想从第一个数组中删除完整的嵌套数组。所以在第一个数组中只有第3个[2]数组是唯一的。
输出应该是:
Array
(
[0] => Array
(
[id] => 1
[controller] => users
[action] => login
)
)
请注意 请注意,第二个数组不必与第一个数组的顺序相同。与我的问题相反,每个数组的前两个数组都是相同的。
我尝试的是:
$result = array();
for($i=0; $i < count($a); $i++)
{
$result[] = array_diff($a[$i], $b[$i]);
}
print_r($result); // This doesn't give required output. It removes every thing and return like
Array
(
[0] => Array
(
)
[1] => Array
(
)
[2] => Array
(
[action] => login
)
)
答案 0 :(得分:1)
看看this回答。我认为它完全符合你的需要。
答案 1 :(得分:0)
你可以通过多种方式解决这个问题。这是我认为非常简单的一个。
首先,根据$a
设置一个新数组,并通过控制器和操作属性对其进行索引。
$final = array();
foreach($a AS $item) {
$final[$item['controller'] . $item['action']] = $item;
}
现在你可以遍历第二个数组,删除任何匹配的项目。
foreach($b AS $item) {
unset($final[$item['controller'] . $item['action']]);
}
现在$final
应该是您想要的数组。
答案 2 :(得分:0)
这是我自己的工作解决方案
for($i=0; $i < count($data); $i++)
{
foreach($this->existing_data as $v)
{
if( ($v['controller'] == $data[$i]['controller']) && ($v['action'] == $data[$i]['action']) )
{
unset($data[$i]);
break;
}
}
}