daffodil
daffodil

Reputation: 197

How to delete array of element in array

I have two array. I want to remove if 2nd array exists in 1st array. For example

array1 = array ("apple","banana","papaya","watermelon","avocado");
array2 = array ("apple","avocado");

I want the output should be

Array ( [1] => banana [2] => papaya [3] => watermelon)

Here are some code that I'd tried.

foreach($array2 as $key){
    $keyToDelete = array_search($key, $array1);
    unset($array1[$keyToDelete]);
}
print_r($array1);

but the output is

Array ( [1] => banana [2] => papaya [3] => watermelon [4] =>avocado )

It only remove first element.

i also tried to do something like this

$result = array_diff($array1,$array2);
print_r($result);

but the output is it print all element in array1

Noted: I want the result need to be outside foreach loop

Upvotes: 1

Views: 87

Answers (3)

nice_dev
nice_dev

Reputation: 17825

The fastest way to do this is to create a set(associative array) of elements in $array2 and iterate over $array1 and check if element in $array1 exists in our set or not using isset(). We take advantage of the method/algorithm technique called hashing.

<?php

$array1 = array ("apple","banana","papaya","watermelon","avocado");
$array2 = array ("apple","avocado");

$set = [];

foreach($array2 as $element){
    $set[$element] = true;
}

$result = [];


foreach($array1 as $element){
    if(!isset($set[$element])){
        $result[] = $element;
    }
}


print_r($result);

Demo: https://3v4l.org/PcS45

Upvotes: 0

MH2K9
MH2K9

Reputation: 12039

With the help of array_filter() we can do it easily. It filters elements of an array using a callback function.

array_filter() iterates over each value in the input array passing them to the callback function. If the callback function returns true, the current value from input is returned into the result array. Array keys are preserved.

Here we have used use($array2) clause to access the external variable inside callback function. $array2 is needed to filter out $array1.

$array1 = array("apple","banana","papaya","watermelon","avocado");
$array2 = array("apple","avocado");

$array1 = array_filter($array1, function($item) use($array2) { return !in_array($item, $array2); });

print '<pre>';
print_r($array1);

Demo

Upvotes: 1

Shivendra Singh
Shivendra Singh

Reputation: 3006

array_diff should be work.

<?php

$array1 = array ("apple","banana","papaya","watermelon","avocado");
$array2 = array ("apple","avocado");

$array_diff = array_diff($array1, $array2);

print_r($array_diff);

?>

DEMO

output will be.

Array ( [1] => banana [2] => papaya [3] => watermelon)

You can also try below solution. result will be same.. using in_array Check if first array value not in the second tester that value in the new array 'final_result' for results.

in_array support (PHP 4, PHP 5, PHP 7)

$array1 = array ("apple","banana","papaya","watermelon","avocado");
$array2 = array ("apple","avocado");

$final_result = array();
foreach($array1 as $value){

    if(!in_array($value, $array2)){

        $final_result[] = $value;
    }

}

print_r($final_result);

?>

DEMO

Upvotes: 2

Related Questions