>我有两个数组,比如
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'])。因此,在第一个数组中,只有第三个 [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
)
)
看看这个答案。我认为它会完全满足您的需求。
有很多方法可以做到这一点。这是一个我认为非常简单的。
首先,基于 $a
设置一个新数组,通过控制器和操作属性对其进行索引。
$final = array();
foreach($a AS $item) {
$final[$item['controller'] . $item['action']] = $item;
}
现在,您可以遍历第二个数组,删除任何匹配的项。
foreach($b AS $item) {
unset($final[$item['controller'] . $item['action']]);
}
现在$final
应该是您想要的数组。
工作示例:http://3v4l.org/JtUkN
这是我
自己的工作解决方案
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;
}
}
}