如何从数组中删除不在另一个数组中的键?

Rus*_*ell 6 php arrays

我有以下两个数组:

编辑

根据@Wrikken的建议,我已经清理了第一个数组,现在有了这个:

第一阵列:

Array
(
    [0] => 3
    [1] => 4
    [2] => 9
    [3] => 11
)
Run Code Online (Sandbox Code Playgroud)

第二阵列:

Array
(
    [3] => stdClass Object ( [tid] => 3 )

    [12] => stdClass Object ( tid] => 12 )

    [9] => stdClass Object ( [tid] => 9 )
)
Run Code Online (Sandbox Code Playgroud)

编辑

第二个数组在第一个数组上进行过滤.第二个数组有3,12,9.第一个数组不包含12,因此应从第二个数组中删除12个.

所以我最终应该:

Array
(
    [3] => stdClass Object ( [tid] => 3 )

    [9] => stdClass Object ( [tid] => 9 )
)
Run Code Online (Sandbox Code Playgroud)

Gum*_*mbo 6

你可以这样做:

$keys = array_map(function($val) { return $val['value']; }, $first);
$result = array_intersect_key(array_flip($keys), $second);
Run Code Online (Sandbox Code Playgroud)

array_map呼叫将提取的值从值$first,使得$keys是这些值的阵列.然后array_intersect_key用于得到$keys(翻转以使用键作为值,反之亦然)和第二个数组的交集$second.


Rus*_*ell 6

经过一些清理之后,我非常清楚我需要什么,这一点点排除了:

foreach ($second_array as $foo) {
  if (!in_array($foo->tid, $first_array)) {
    unset($second_array[$foo->tid]);
  }
}   
Run Code Online (Sandbox Code Playgroud)


vat*_*ale 5

对于关联数组,可以使用简单的键允许列表过滤器:

$arr = array('a' => 123, 'b' => 213, 'c' => 321); 
$allowed = array('b', 'c'); 

print_r(array_intersect_key($arr, array_flip($allowed))); 
Run Code Online (Sandbox Code Playgroud)

将返回:

Array 
( 
    [b] => 213 
    [c] => 321 
)
Run Code Online (Sandbox Code Playgroud)