How to unset array key in php?

View Discussion

Improve Article

Save Article

  • Read
  • Discuss
  • View Discussion

    Improve Article

    Save Article

    Given an array (One dimensional or multidimensional) and the task is to delete an array element based on key value.

    Examples:

    Input: Array
           (   
               [0] => 'G' 
               [1] => 'E'
               [2] => 'E'
               [3] => 'K'
               [4] => 'S'
           )
           Key = 2
    Output: Array
            (   
                [0] => 'G' 
                [1] => 'E'
                [3] => 'K'
                [4] => 'S'
            )
    

    Using unset() Function: The unset() function is used to remove element from the array. The unset function is used to destroy any other variable and same way use to delete any element of an array. This unset command takes the array key as input and removed that element from the array. After removal the associated key and value does not change.

    Syntax:

    unset($variable)

    Parameter: This function accepts single parameter variable. It is required parameter and used to unset the element.

    Program 1: Delete an element from one dimensional array.

    $arr = array('G', 'E', 'E', 'K', 'S');

    print_r($arr);

    unset($arr[2]);

    print_r($arr);

    ?>

    Output:

    Array
    (
        [0] => G
        [1] => E
        [2] => E
        [3] => K
        [4] => S
    )
    Array
    (
        [0] => G
        [1] => E
        [3] => K
        [4] => S
    )
    

    Program 2: Delete an element from associative array.

    $marks = array

        "Ankit" => array

            "C" => 95, 

            "DCO" => 85, 

        ), 

        "Ram" => array

            "C" => 78, 

            "DCO" => 98, 

        ), 

        "Anoop" => array

            "C" => 88, 

            "DCO" => 46, 

        ), 

    ); 

    echo "Before delete the element
    "
    ;

    print_r($marks); 

    unset($marks["Ram"]);

    echo "After delete the element
    "
    ;

    print_r($marks); 

    ?> 

    Output:

    Before delete the element 
    Array ( [Ankit] => Array ( [C] => 95 [DCO] => 85 ) [Ram] => Array ( [C] => 78 [DCO] => 98 ) [Anoop] => Array ( [C] => 88 [DCO] => 46 ) ) After delete the element
    Array ( [Ankit] => Array ( [C] => 95 [DCO] => 85 ) [Anoop] => Array ( [C] => 88 [DCO] => 46 ) )

    PHP is a server-side scripting language designed specifically for web development. You can learn PHP from the ground up by following this PHP Tutorial and PHP Examples.


    There are different ways to delete an array element, where some are more useful for some specific tasks than others.

    Deleting a single array element

    If you want to delete just one array element you can use unset() or alternatively \array_splice().

    If you know the value and don’t know the key to delete the element you can use \array_search() to get the key. This only works if the element does not occur more than once, since \array_search returns the first hit only.

    unset()

    Note that when you use unset() the array keys won’t change. If you want to reindex the keys you can use \array_values() after unset(), which will convert all keys to numerically enumerated keys starting from 0.

    Code:

    $array = [0 => "a", 1 => "b", 2 => "c"];
    unset($array[1]);
              // ↑ Key which you want to delete
    

    Output:

    [
        [0] => a
        [2] => c
    ]
    

    \array_splice() method

    If you use \array_splice() the keys will automatically be reindexed, but the associative keys won’t change — as opposed to \array_values(), which will convert all keys to numerical keys.

    \array_splice() needs the offset, not the key, as the second parameter.

    Code:

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \array_splice($array, 1, 1);
                       // ↑ Offset which you want to delete
    

    Output:

    [
        [0] => a
        [1] => c
    ]
    

    array_splice(), same as unset(), take the array by reference. You don’t assign the return values of those functions back to the array.

    Deleting multiple array elements

    If you want to delete multiple array elements and don’t want to call unset() or \array_splice() multiple times you can use the functions \array_diff() or \array_diff_key() depending on whether you know the values or the keys of the elements which you want to delete.

    \array_diff() method

    If you know the values of the array elements which you want to delete, then you can use \array_diff(). As before with unset() it won’t change the keys of the array.

    Code:

    $array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
    $array = \array_diff($array, ["a", "c"]);
                              // └────────┘
                              // Array values which you want to delete
    

    Output:

    [
        [1] => b
    ]
    

    \array_diff_key() method

    If you know the keys of the elements which you want to delete, then you want to use \array_diff_key(). You have to make sure you pass the keys as keys in the second parameter and not as values. Keys won’t reindex.

    Code:

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   // ↑           ↑
                                   // Array keys which you want to delete
    

    Output:

    [
        [1] => b
    ]
    

    If you want to use unset() or \array_splice() to delete multiple elements with the same value you can use \array_keys() to get all the keys for a specific value and then delete all elements.

    \array_filter() method

    If you want to delete all elements with a specific value in the array you can use \array_filter().

    Code:

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_filter($array, static function ($element) {
        return $element !== "b";
        //                   ↑
        // Array value which you want to delete
    });
    

    Output:

    [
        [0] => a
        [1] => c
    ]
    

    15

    It should be noted that unset() will keep indexes untouched, which is what you'd expect when using string indexes (array as hashtable), but can be quite surprising when dealing with integer indexed arrays:

    $array = array(0, 1, 2, 3);
    unset($array[2]);
    var_dump($array);
    /* array(3) {
      [0]=>
      int(0)
      [1]=>
      int(1)
      [3]=>
      int(3)
    } */
    
    $array = array(0, 1, 2, 3);
    array_splice($array, 2, 1);
    var_dump($array);
    /* array(3) {
      [0]=>
      int(0)
      [1]=>
      int(1)
      [2]=>
      int(3)
    } */
    

    So array_splice() can be used if you'd like to normalize your integer keys. Another option is using array_values() after unset():

    $array = array(0, 1, 2, 3);
    
    unset($array[2]);
    $array = array_values($array);
    var_dump($array);
    /* array(3) {
      [0]=>
      int(0)
      [1]=>
      int(1)
      [2]=>
      int(3)
    } */
    

    How to unset array key in php?

    Ry-

    211k54 gold badges442 silver badges456 bronze badges

    answered Dec 15, 2008 at 21:25

    Stefan GehrigStefan Gehrig

    81.5k24 gold badges155 silver badges185 bronze badges

    9

      // Our initial array
      $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
      print_r($arr);
    
      // Remove the elements who's values are yellow or red
      $arr = array_diff($arr, array("yellow", "red"));
      print_r($arr);
    

    This is the output from the code above:

    Array
    (
        [0] => blue
        [1] => green
        [2] => red
        [3] => yellow
        [4] => green
        [5] => orange
        [6] => yellow
        [7] => indigo
        [8] => red
    )
    
    Array
    (
        [0] => blue
        [1] => green
        [4] => green
        [5] => orange
        [7] => indigo
    )
    

    Now, array_values() will reindex a numerical array nicely, but it will remove all key strings from the array and replace them with numbers. If you need to preserve the key names (strings), or reindex the array if all keys are numerical, use array_merge():

    $arr = array_merge(array_diff($arr, array("yellow", "red")));
    print_r($arr);
    

    Outputs

    Array
    (
        [0] => blue
        [1] => green
        [2] => green
        [3] => orange
        [4] => indigo
    )
    

    How to unset array key in php?

    answered Aug 2, 2011 at 15:57

    Marcel CozmaMarcel Cozma

    4,2891 gold badge17 silver badges17 bronze badges

    3

    $key = array_search($needle, $array);
    if ($key !== false) {
        unset($array[$key]);
    }
    

    How to unset array key in php?

    answered Nov 15, 2011 at 11:29

    liamvictorliamvictor

    3,1711 gold badge22 silver badges25 bronze badges

    2

    answered Dec 15, 2008 at 20:31

    How to unset array key in php?

    Eran GalperinEran Galperin

    85.5k24 gold badges115 silver badges132 bronze badges

    Also, for a named element:

    unset($array["elementName"]);
    

    Mohammad

    20.5k15 gold badges53 silver badges80 bronze badges

    answered Jul 31, 2010 at 1:06

    How to unset array key in php?

    5

    If you have a numerically indexed array where all values are unique (or they are non-unique but you wish to remove all instances of a particular value), you can simply use array_diff() to remove a matching element, like this:

    $my_array = array_diff($my_array, array('Value_to_remove'));
    

    For example:

    $my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
    echo sizeof($my_array) . "\n";
    $my_array = array_diff($my_array, array('Charles'));
    echo sizeof($my_array);
    

    This displays the following:

    4
    3
    

    In this example, the element with the value 'Charles' is removed as can be verified by the sizeof() calls that report a size of 4 for the initial array, and 3 after the removal.

    answered Nov 26, 2012 at 8:25

    Robin NixonRobin Nixon

    7115 silver badges2 bronze badges

    1

    Destroy a single element of an array

    unset()

    $array1 = array('A', 'B', 'C', 'D', 'E');
    unset($array1[2]); // Delete known index(2) value from array
    var_dump($array1);
    

    The output will be:

    array(4) {
      [0]=>
      string(1) "A"
      [1]=>
      string(1) "B"
      [3]=>
      string(1) "D"
      [4]=>
      string(1) "E"
    }
    

    If you need to re index the array:

    $array1 = array_values($array1);
    var_dump($array1);
    

    Then the output will be:

    array(4) {
      [0]=>
      string(1) "A"
      [1]=>
      string(1) "B"
      [2]=>
      string(1) "D"
      [3]=>
      string(1) "E"
    }
    

    Pop the element off the end of array - return the value of the removed element

    mixed array_pop(array &$array)

    $stack = array("orange", "banana", "apple", "raspberry");
    $last_fruit = array_pop($stack);
    print_r($stack);
    print_r('Last Fruit:'.$last_fruit); // Last element of the array
    

    The output will be

    Array
    (
        [0] => orange
        [1] => banana
        [2] => apple
    )
    Last Fruit: raspberry
    

    Remove the first element (red) from an array, - return the value of the removed element

    mixed array_shift ( array &$array )

    $color = array("a" => "red", "b" => "green" , "c" => "blue");
    $first_color = array_shift($color);
    print_r ($color);
    print_r ('First Color: '.$first_color);
    

    The output will be:

    Array
    (
        [b] => green
        [c] => blue
    )
    First Color: red
    

    How to unset array key in php?

    answered Jul 19, 2015 at 15:37

    How to unset array key in php?

    KTAnjKTAnj

    1,32614 silver badges35 bronze badges

    2

    
    

    Output:

    [
        [0] => fruit2
        [1] => fruit3
        [2] => fruit4
    ]
    
    fruit1
    

    How to unset array key in php?

    answered Jun 11, 2013 at 5:51

    How to unset array key in php?

    5

    If the index is specified:

    $arr = ['a', 'b', 'c'];
    $index = 0;    
    unset($arr[$index]);  // $arr = ['b', 'c']
    

    If we have value instead of index:

    $arr = ['a', 'b', 'c'];
    
    // search the value to find index
    // Notice! this will only find the first occurrence of value
    $index = array_search('a', $arr);
    
    if($index !== false){
       unset($arr[$index]);  // $arr = ['b', 'c']
    }
    

    The if condition is necessary because if index is not found, unset() will automatically delete the first element of the array which is not what we want.

    answered May 23, 2019 at 12:26

    How to unset array key in php?

    Ahmad MobarakiAhmad Mobaraki

    6,1753 gold badges47 silver badges65 bronze badges

    7

    If you have to delete multiple values in an array and the entries in that array are objects or structured data, array_filter() is your best bet. Those entries that return a true from the callback function will be retained.

    $array = [
        ['x'=>1,'y'=>2,'z'=>3], 
        ['x'=>2,'y'=>4,'z'=>6], 
        ['x'=>3,'y'=>6,'z'=>9]
    ];
    
    $results = array_filter($array, function($value) {
        return $value['x'] > 2; 
    }); //=> [['x'=>3,'y'=>6,z=>'9']]
    

    How to unset array key in php?

    Dharman

    27.9k21 gold badges75 silver badges127 bronze badges

    answered Feb 18, 2016 at 1:40

    spylespyle

    1,92026 silver badges23 bronze badges

    If you need to remove multiple elements from an associative array, you can use array_diff_key() (here used with array_flip()):

    $my_array = array(
      "key1" => "value 1",
      "key2" => "value 2",
      "key3" => "value 3",
      "key4" => "value 4",
      "key5" => "value 5",
    );
    
    $to_remove = array("key2", "key4");
    
    $result = array_diff_key($my_array, array_flip($to_remove));
    
    print_r($result);
    

    Output:

    Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 
    

    answered Apr 20, 2016 at 21:05

    SimonSimon

    3,3102 gold badges20 silver badges22 bronze badges

    2

    Associative arrays

    For associative arrays, use unset:

    $arr = array('a' => 1, 'b' => 2, 'c' => 3);
    unset($arr['b']);
    
    // RESULT: array('a' => 1, 'c' => 3)
    

    Numeric arrays

    For numeric arrays, use array_splice:

    $arr = array(1, 2, 3);
    array_splice($arr, 1, 1);
    
    // RESULT: array(0 => 1, 1 => 3)
    

    Note

    Using unset for numeric arrays will not produce an error, but it will mess up your indexes:

    $arr = array(1, 2, 3);
    unset($arr[1]);
    
    // RESULT: array(0 => 1, 2 => 3)
    

    How to unset array key in php?

    answered Mar 11, 2016 at 18:48

    How to unset array key in php?

    John SlegersJohn Slegers

    42.7k22 gold badges194 silver badges163 bronze badges

    unset() destroys the specified variables.

    The behavior of unset() inside of a function can vary depending on what type of variable you are attempting to destroy.

    If a globalized variable is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.

    
    

    The answer of the above code will be bar.

    To unset() a global variable inside of a function:

    
    

    How to unset array key in php?

    answered Jul 26, 2013 at 20:11

    // Remove by value
    function removeFromArr($arr, $val)
    {
        unset($arr[array_search($val, $arr)]);
        return array_values($arr);
    }
    

    answered Apr 2, 2016 at 18:42

    How to unset array key in php?

    GigolandGigoland

    9119 silver badges10 bronze badges

    1

    Solutions:

    1. To delete one element, use unset():
    unset($array[3]);
    unset($array['foo']);
    
    1. To delete multiple noncontiguous elements, also use unset():
    unset($array[3], $array[5]);
    unset($array['foo'], $array['bar']);
    
    1. To delete multiple contiguous elements, use array_splice():
    array_splice($array, $offset, $length);
    

    Further explanation:

    Using these functions removes all references to these elements from PHP. If you want to keep a key in the array, but with an empty value, assign the empty string to the element:

    $array[3] = $array['foo'] = '';
    

    Besides syntax, there's a logical difference between using unset() and assigning '' to the element. The first says This doesn't exist anymore, while the second says This still exists, but its value is the empty string.

    If you're dealing with numbers, assigning 0 may be a better alternative. So, if a company stopped production of the model XL1000 sprocket, it would update its inventory with:

    unset($products['XL1000']);
    

    However, if it temporarily ran out of XL1000 sprockets, but was planning to receive a new shipment from the plant later this week, this is better:

    $products['XL1000'] = 0;
    

    If you unset() an element, PHP adjusts the array so that looping still works correctly. It doesn't compact the array to fill in the missing holes. This is what we mean when we say that all arrays are associative, even when they appear to be numeric. Here's an example:

    // Create a "numeric" array
    $animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
    print $animals[1];  // Prints 'bee'
    print $animals[2];  // Prints 'cat'
    count($animals);    // Returns 6
    
    // unset()
    unset($animals[1]); // Removes element $animals[1] = 'bee'
    print $animals[1];  // Prints '' and throws an E_NOTICE error
    print $animals[2];  // Still prints 'cat'
    count($animals);    // Returns 5, even though $array[5] is 'fox'
    
    // Add a new element
    $animals[ ] = 'gnu'; // Add a new element (not Unix)
    print $animals[1];  // Prints '', still empty
    print $animals[6];  // Prints 'gnu', this is where 'gnu' ended up
    count($animals);    // Returns 6
    
    // Assign ''
    $animals[2] = '';   // Zero out value
    print $animals[2];  // Prints ''
    count($animals);    // Returns 6, count does not decrease
    

    To compact the array into a densely filled numeric array, use array_values():

    $animals = array_values($animals);
    

    Alternatively, array_splice() automatically reindexes arrays to avoid leaving holes:

    // Create a "numeric" array
    $animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
    array_splice($animals, 2, 2);
    print_r($animals);
    Array
    (
        [0] => ant
        [1] => bee
        [2] => elk
        [3] => fox
    )
    

    This is useful if you're using the array as a queue and want to remove items from the queue while still allowing random access. To safely remove the first or last element from an array, use array_shift() and array_pop(), respectively.

    How to unset array key in php?

    answered Jan 29, 2018 at 11:08

    Abdur RehmanAbdur Rehman

    3,1325 gold badges32 silver badges47 bronze badges

    Follow the default functions:

    • PHP: unset

    unset() destroys the specified variables. For more info, you can refer to PHP unset

    $Array = array("test1", "test2", "test3", "test3");
    
    unset($Array[2]);
    
    • PHP: array_pop

    The array_pop() function deletes the last element of an array. For more info, you can refer to PHP array_pop

    $Array = array("test1", "test2", "test3", "test3");
    
    array_pop($Array);
    
    • PHP: array_splice

    The array_splice() function removes selected elements from an array and replaces it with new elements. For more info, you can refer to PHP array_splice

    $Array = array("test1", "test2", "test3", "test3");
    
    array_splice($Array,1,2);
    
    • PHP: array_shift

    The array_shift() function removes the first element from an array. For more info, you can refer to PHP array_shift

    $Array = array("test1", "test2", "test3", "test3");
    
    array_shift($Array);
    

    How to unset array key in php?

    Rabby

    3024 silver badges15 bronze badges

    answered Jan 25, 2016 at 13:07

    msvairammsvairam

    8325 silver badges12 bronze badges

    I'd just like to say I had a particular object that had variable attributes (it was basically mapping a table and I was changing the columns in the table, so the attributes in the object, reflecting the table would vary as well):

    class obj {
        protected $fields = array('field1','field2');
        protected $field1 = array();
        protected $field2 = array();
        protected loadfields(){}
        // This will load the $field1 and $field2 with rows of data for the column they describe
        protected function clearFields($num){
            foreach($fields as $field) {
                unset($this->$field[$num]);
                // This did not work the line below worked
                unset($this->{$field}[$num]); // You have to resolve $field first using {}
            }
        }
    }
    

    The whole purpose of $fields was just, so I don't have to look everywhere in the code when they're changed, I just look at the beginning of the class and change the list of attributes and the $fields array content to reflect the new attributes.

    How to unset array key in php?

    answered Aug 21, 2013 at 2:31

    OxydelOxydel

    1661 silver badge5 bronze badges

    Suppose you have the following array:

    Array
    (
        [user_id] => 193
        [storage] => 5
    )
    

    To delete storage, do:

    unset($attributes['storage']);
    $attributes = array_filter($attributes);
    

    And you get:

    Array
    (
        [user_id] => 193
    )
    

    Abdur Rehman

    3,1325 gold badges32 silver badges47 bronze badges

    answered Jun 11, 2015 at 22:25

    How to unset array key in php?

    TebeTebe

    3,0957 gold badges37 silver badges58 bronze badges

    4

    Two ways for removing the first item of an array with keeping order of the index and also if you don't know the key name of the first item.

    Solution #1

    // 1 is the index of the first object to get
    // NULL to get everything until the end
    // true to preserve keys
    $array = array_slice($array, 1, null, true);
    

    Solution #2

    // Rewinds the array's internal pointer to the first element
    // and returns the value of the first array element.
    $value = reset($array);
    // Returns the index element of the current array position
    $key = key($array);
    unset($array[$key]);
    

    For this sample data:

    $array = array(10 => "a", 20 => "b", 30 => "c");
    

    You must have this result:

    array(2) {
      [20]=>
      string(1) "b"
      [30]=>
      string(1) "c"
    }
    

    How to unset array key in php?

    answered Oct 16, 2018 at 1:20

    Nabi K.A.Z.Nabi K.A.Z.

    8,7966 gold badges53 silver badges71 bronze badges

    3

    unset() multiple, fragmented elements from an array

    While unset() has been mentioned here several times, it has yet to be mentioned that unset() accepts multiple variables making it easy to delete multiple, noncontiguous elements from an array in one operation:

    // Delete multiple, noncontiguous elements from an array
    $array = [ 'foo', 'bar', 'baz', 'quz' ];
    unset( $array[2], $array[3] );
    print_r($array);
    // Output: [ 'foo', 'bar' ]
    

    unset() dynamically

    unset() does not accept an array of keys to remove, so the code below will fail (it would have made it slightly easier to use unset() dynamically though).

    $array = range(0,5);
    $remove = [1,2];
    $array = unset( $remove ); // FAILS: "unexpected 'unset'"
    print_r($array);
    

    Instead, unset() can be used dynamically in a foreach loop:

    $array = range(0,5);
    $remove = [1,2];
    foreach ($remove as $k=>$v) {
        unset($array[$v]);
    }
    print_r($array);
    // Output: [ 0, 3, 4, 5 ]
    

    Remove array keys by copying the array

    There is also another practice that has yet to be mentioned. Sometimes, the simplest way to get rid of certain array keys is to simply copy $array1 into $array2.

    $array1 = range(1,10);
    foreach ($array1 as $v) {
        // Remove all even integers from the array
        if( $v % 2 ) {
            $array2[] = $v;
        }
    }
    print_r($array2);
    // Output: [ 1, 3, 5, 7, 9 ];
    

    Obviously, the same practice applies to text strings:

    $array1 = [ 'foo', '_bar', 'baz' ];
    foreach ($array1 as $v) {
        // Remove all strings beginning with underscore
        if( strpos($v,'_')===false ) {
            $array2[] = $v;
        }
    }
    print_r($array2);
    // Output: [ 'foo', 'baz' ]
    

    Abdur Rehman

    3,1325 gold badges32 silver badges47 bronze badges

    answered Dec 7, 2017 at 6:28

    "value 1", "key2"=>"value 2", "key3"=>"value 3");
    
        print_r($my_array);
        if (array_key_exists("key1", $my_array)) {
            unset($my_array['key1']);
            print_r($my_array);
        }
        else {
            echo "Key does not exist";
        }
    ?>
    
    "value 1", "key2"=>"value 2", "key3"=>"value 3");
        print_r($my_array);
        $new_array = array_slice($my_array, 1);
        print_r($new_array);
    ?>
    
    
        ";
        // To remove first array element to length
        // starts from first and remove two element
        $my_array = array("key1"=>"value 1", "key2"=>"value 2", "key3"=>"value 3");
        print_r($my_array);
        $new_array = array_slice($my_array, 1, 2);
        print_r($new_array);
    ?>
    

    Output

     Array ( [key1] => value 1 [key2] => value 2 [key3] =>
     value 3 ) Array (    [key2] => value 2 [key3] => value 3 )
     Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
     Array ( [key2] => value 2 [key3] => value 3 )
     Array ( [key1] => value 1 [key2] => value 2 [key3] => value 3 )
     Array ( [key2] => value 2 [key3] => value 3 )
    

    How to unset array key in php?

    answered Aug 16, 2016 at 15:36

    How to unset array key in php?

    1

    Remove an array element based on a key:

    Use the unset function like below:

    $a = array(
           'salam',
           '10',
           1
    );
    
    unset($a[1]);
    
    print_r($a);
    
    /*
    
        Output:
    
            Array
            (
                [0] => salam
                [2] => 1
            )
    
    */
    

    Remove an array element based on value:

    Use the array_search function to get an element key and use the above manner to remove an array element like below:

    $a = array(
           'salam',
           '10',
           1
    );
    
    $key = array_search(10, $a);
    
    if ($key !== false) {
        unset($a[$key]);
    }
    
    print_r($a);
    
    /*
    
        Output:
    
            Array
            (
                [0] => salam
                [2] => 1
            )
    
    */
    

    How to unset array key in php?

    answered Sep 22, 2017 at 10:28

    MahdiYMahdiY

    1,26921 silver badges31 bronze badges

    1

    Edit

    If you can't take it as given that the object is in that array you need to add a check:

    if(in_array($object,$array)) unset($array[array_search($object,$array)]);
    

    Original Answer

    if you want to remove a specific object of an array by reference of that object you can do following:

    unset($array[array_search($object,$array)]);
    

    Example:

    id = 1;
    $foo1->name = 'Name1';
    
    $foo2 = new Foo();
    $foo2->id = 2;
    $foo2->name = 'Name2';
    
    $foo3 = new Foo();
    $foo3->id = 3;
    $foo3->name = 'Name3';
    
    
    $array = array($foo1,$foo2,$foo3);
    unset($array[array_search($foo2,$array)]);
    
    echo '
    ';
    var_dump($array);
    echo '
    '; ?>

    Result:

    array(2) {
    [0]=>
        object(Foo)#1 (2) {
            ["id"]=>
            int(1)
            ["name"]=>
            string(5) "Name1"
        }
    [2]=>
        object(Foo)#3 (2) {
            ["id"]=>
            int(3)
            ["name"]=>
            string(5) "Name3"
        }
    }
    

    Note that if the object occures several times it will only be removed the first occurence!

    answered Jun 11, 2019 at 10:16

    How to unset array key in php?

    Sam TigleSam Tigle

    3533 silver badges12 bronze badges

    3

    Use the following code:

    $arr = array('orange', 'banana', 'apple', 'raspberry');
    $result = array_pop($arr);
    print_r($result);
    

    1

    I came here because I wanted to see if there was a more elegant solution to this problem than using unset($arr[$i]). To my disappointment these answers are either wrong or do not cover every edge case.

    Here is why array_diff() does not work. Keys are unique in the array, while elements are not always unique.

    $arr = [1,2,2,3];
    
    foreach($arr as $i => $n){
        $b = array_diff($arr,[$n]);
        echo "\n".json_encode($b);
    }
    

    Results...

    [2,2,3]
    [1,3]
    [1,2,2] 
    

    If two elements are the same they will be remove. This also applies for array_search() and array_flip().

    I saw a lot of answers with array_slice() and array_splice(), but these functions only work with numeric arrays. All the answers I am aware if here does not answer the question, and so here is a solution that will work.

    $arr = [1,2,3];
    
    foreach($arr as $i => $n){
        $b = array_merge(array_slice($arr,0,$i),array_slice($arr,$i+1));
        echo "\n".json_encode($b);
    }
    
    Results...
    
    [2,3];
    [1,3];
    [1,2];
    

    Since unset($arr[$i]) will work on both associative array and numeric arrays this still does not answer the question.

    This solution is to compare the keys and with a tool that will handle both numeric and associative arrays. I use array_diff_uassoc() for this. This function compares the keys in a call back function.

    $arr = [1,2,2,3];
    //$arr = ['a'=>'z','b'=>'y','c'=>'x','d'=>'w'];
    foreach($arr as $key => $n){
        $b = array_diff_uassoc($arr, [$key=>$n], function($a,$b) {
            if($a != $b){
                return 1;
            }
        });
        echo "\n".json_encode($b);
    }    
    

    Results.....

    [2,2,3];
    [1,2,3];
    [1,2,2];
    
    ['b'=>'y','c'=>'x','d'=>'w'];
    ['a'=>'z','c'=>'x','d'=>'w'];
    ['a'=>'z','b'=>'y','d'=>'w'];
    ['a'=>'z','b'=>'y','c'=>'x'];
    

    answered Oct 13, 2020 at 14:32

    Jed LynchJed Lynch

    1,74017 silver badges12 bronze badges

    0

    How do you unset an array key?

    Using unset() Function: The unset() function is used to remove element from the array. The unset function is used to destroy any other variable and same way use to delete any element of an array. This unset command takes the array key as input and removed that element from the array.

    How do you unset an associative array in PHP?

    Answer: Use the PHP unset() Function If you want to delete an element from an array you can simply use the unset() function. The following example shows how to delete an element from an associative array and numeric array.

    How can remove last key from array in PHP?

    The array_pop() function deletes the last element of an array.

    What is Array_keys () used for in PHP?

    The array_keys() function returns an array containing the keys.