Php 数组未设置键
直截了当地说 我有一个数组(Php 数组未设置键,php,arrays,Php,Arrays,直截了当地说 我有一个数组($is\u anonymous\u ari)如下所示: array ( [80] => 1 [57] => 1 [66] => [60] => [90] => 1 ) 还有另一个数组($user\u id\u ary)如下所示: array ( [0] => 80 [1] => 30 [2] => 57 [3] => 89 [4] => 66 [5] =>
$is\u anonymous\u ari
)如下所示:
array (
[80] => 1
[57] => 1
[66] =>
[60] =>
[90] => 1
)
还有另一个数组($user\u id\u ary
)如下所示:
array (
[0] => 80
[1] => 30
[2] => 57
[3] => 89
[4] => 66
[5] => 60
[6] => 90
)
我需要根据第一个数组取消设置$user\u id\u ary
上的值。因此,如果$is\u anonymous\u ary
中的值为1(true),则从该数组中获取密钥,对照$user\u id\u ary
检查,并取消设置$user\u id\u ary
中的密钥,该密钥具有$is\u anonymous\u ary
中的密钥值
我的描述有点复杂,下面是我需要最终结果的方式:
user_id_ary = array(
[0] => 30
[1] => 89
[2] => 66
[3] => 60
)
正如您所看到的,$is\u anonymous\u ary
中具有TRUE
值的所有键都在第二个数组中消失。其中第一个数组中的键作为第二个数组中的值
希望我说清楚。试试:
$user_id_ary = array_filter($user_id_ary, function($var) use ($is_anonymous_ary) {
return !(isset($is_anonymous_ary[$var]) && $is_anonymous_ary[$var] === 1);
});
多么容易:)
如果这不起作用,尝试迭代用户id数组中的每个元素这难道不能通过基于
===
1的简单循环相交来删除吗?我不知道,因此有这个问题。为什么返回?我不是在函数内部工作!你能解释一下你的代码是做什么的吗?@Dugi你看过手册了吗?元素make The callback return false将被删除。@Dugi返回决定是否根据该条件筛选数组array\u filter
,不带该函数,将删除空值,该函数将根据索引设置的位置删除,并且==
1将相同的比较更改为=
后,您的答案有效。谢谢。@Dugi,这意味着它是数组中的字符串'1'
而不是整数1
。我需要继续使用$user\u id\u ary作为变量名,因为它在多个地方使用了不止一次。有没有任何建议不能摆脱我当前的$user\u id\u ary?
$user_id_ary = array_diff($user_id_ary, array_keys(array_filter($is_anonymous_ary)));
foreach($user_id_ary as $id){
if($is_anonymous_ary[$id] == '1'){
unset($d);
}
}
$user_id_ary = array_diff($user_id_ary, array_keys(array_filter($is_anonymous_ary)));