数组取消键的设置

7

直接进入主题...

我有一个数组 ($is_anonymous_ary),它长这样:

array (
  [80] => 1
  [57] => 1
  [66] =>
  [60] => 
  [90] => 1
)

另一个类似于此的数组($user_id_ary)如下所示:
array (
  [0] => 80
  [1] => 30
  [2] => 57
  [3] => 89
  [4] => 66
  [5] => 60
  [6] => 90
)

我需要根据第一个数组取消$user_id_ary的值。因此,如果来自$is_anonymous_ary的值为1(true),则从该数组中取出键,并检查与$user_id_ary匹配的键,并取消具有与$is_anonymous_ary中键的值相同的$user_id_ary中的键。
我稍微复杂了一下描述,这就是我需要的最终结果:
user_id_ary = array(
  [0] => 30
  [1] => 89
  [2] => 66
  [3] => 60
)

正如您所看到的,$is_anonymous_ary 中所有值为 TRUE 的键都在第二个数组中消失了。第二个数组的值是第一个数组中的键。

希望我表述清楚了。


这个不能用一个简单的基于循环的交集来做吗,以便根据=== 1进行删除? - Sammaye
1
我不知道,因此提出这个问题。 - aborted
4个回答

6

尝试使用 array_filter

$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);
});

为什么要返回?我不是在函数内工作!你能解释一下你的代码是做什么的吗? - aborted
@Dugi 你查过手册了吗?使回调函数返回false的元素将被移除。 - xdazz
@Dugi 返回值决定是否根据该条件过滤数组。array_filter函数,如果没有使用该函数,则会删除空值;而使用该函数,则会删除基于索引已设置且为 === 1 的值。 - Sammaye
在将相同比较更改为==后,您的答案有效。谢谢。 - aborted
是的,它们不是整数,而是布尔值。 - aborted
显示剩余4条评论

0

太简单了 :)

$new_array =NULL;
foreach($is_anonymous_ary as $key=>$value){

  $new_array[] = array_search($key, $user_id_ary);
  unset($is_anonymous_ary[$key]);
}
$user_id_ary =  $new_array;

我需要保留$user_id_ary作为变量名,因为它在多个地方都被使用了。有没有任何建议,不会摆脱我当前的$user_id_ary? - aborted

0
foreach($user_id_ary as $id){
   if($is_anonymous_ary[$id] == '1'){
      unset($d);
   }       
}

如果这个方法不起作用,尝试遍历user_id_array中的每个元素。

0
$user_id_ary = array_diff($user_id_ary, array_keys(array_filter($is_anonymous_ary)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接