【问题标题】:Compare two arrays and remove array from array in PHP比较两个数组并从PHP中的数组中删除数组
【发布时间】:2014-09-24 18:11:23
【问题描述】:

我有两个数组,我需要从更大的数组中删除更小的数组

$a = array(223 => 6, 381 => 6);

第二个数组是:

$b = array(array('id' => 45, 'username' => 'rock'), array('id' => 223, 'username' => 'pop'), array('id' => 381, 'username' => 'stock'));

使用 print_r(),它们看起来像这样

Array
(
    [223] => 6
    [381] => 6
)

Array
(
    [0] => Array
        (
            [id] => 45
            [username] => rock
        )

    [1] => Array
        (
            [id] => 223
            [username] => pop
        )

    [2] => Array
        (
            [id] => 381
            [username] => stock
        )

)

如何从 $b 数组中删除 id != $a[keys] 所以结果我会有这样的数组

Array
(
    [0] => Array
        (
            [id] => 223
            [username] => pop
        )

    [1] => Array
        (
            [id] => 381
            [username] => stock
        )

)

我尝试使用 array_diff、array_search 和 unset 但不知道如何使其工作。

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    因此,您要过滤掉不存在$a[$sub_array["id"]] 的值,其中$sub_array$b 的元素:

    那么array_filter()就是你搜索的内容:

    $array = array_filter($b, function ($val) use ($a) {
        return isset($a[$val["id"]]);
    });
    

    【讨论】:

    • 你的变量更干净,但它显示这个错误 array_filter() 期望参数 1 是数组
    • @user3375344 是的,那是因为我没有尊重参数顺序;固定。
    【解决方案2】:
        $a = array(223 => 6, 381 => 6);
        $b = array(array('id' => 45, 'username' => 'rock'), array('id' => 223, 'username' => 'pop'), array('id' => 381, 'username' => 'stock'));
        $keys = array_keys($a);
        $new_array = array();
        for ($i = 0, $len = count($b); $i < $len; $i++) {
            $c = $b[$i];
            if (in_array($c['id'], $keys)) {
                $new_array[] = $c;
            }
        }
        var_dump($new_array);
    

    【讨论】:

    • 查看 bwoebi 的答案以获得更清洁的方法。
    【解决方案3】:
    <?php
    $a = array(223 => 6, 381 => 6);
    $b = array(array('id' => 45, 'username' => 'rock'), array('id' => 223, 'username' => 'pop'), array('id' => 381, 'username' => 'stock'));
    $cc = 0;
    foreach($b as $bb)
    {
        $flag = 0;
        foreach($a as $k => $aa)
        {
            if($bb['id'] == $k)
            {
                $flag=1;
            }
        }
        if($flag == 0)
        {
            unset($b[$cc]);
        }
        $cc++;
    }
    print_r($b);
    

    【讨论】:

      【解决方案4】:

      您想首先使用array_keys 从$a 中获取所有密钥。然后遍历 $b 和 in_array 你会知道 id 是否是一个 $a 键。最后使用unset

      $a = array(223 => 6, 381 => 6);
      $aKey = array_keys($a);
      $b = array(array('id' => 45, 'username' => 'rock'), array('id' => 223, 'username' => 'pop'), array('id' => 381, 'username' => 'stock'));
      foreach ($b as $key => $value)
          if (!in_array($value['id'], $aKey))
              unset($b[$key]);
      print_r($b);
      

      【讨论】:

      • array_keys 消除了第一个循环的需要。
      • @Chris 谢谢!已编辑!
      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2010-11-17
      相关资源
      最近更新 更多