Siada
Siada

Reputation: 47

Compare two arrays and remove array from array in PHP

I have two arrays and I need remove from bigger array smaller

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

and second arrays is:

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

With print_r() they looks like this

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

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

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

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

)

How do I remove from $b array where id != $a[keys] So in result I will have array like this

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

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

)

I try to use array_diff, array_search and unset but do not know how make it work.

Upvotes: 2

Views: 147

Answers (4)

Adam Sinclair
Adam Sinclair

Reputation: 1649

You want first to use array_keys to get all the keys from $a. Then loop through $b and with in_array you will know if id is a $a key. Finally use 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);

Upvotes: 0

bwoebi
bwoebi

Reputation: 23777

So, you want to filter out the values where no $a[$sub_array["id"]] exists, where $sub_array is an element of $b:

Then array_filter() is what you search:

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

Upvotes: 6

Jonathon
Jonathon

Reputation: 16283

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

Upvotes: 1

Sujit Agarwal
Sujit Agarwal

Reputation: 12508

<?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);

Upvotes: 0

Related Questions