What is the best way to delete array item in PHP?

前端 未结 3 567
猫巷女王i
猫巷女王i 2021-02-07 20:22

Could you tell me your way to delete an item from array? Do you think it\'s good?

相关标签:
3条回答
  • 2021-02-07 20:31

    The common way:

    According to the manual

    unset($arr[5]); // This removes the element from the array
    

    The filtered way:

    There is also the array_filter() function to take care of filtering arrays

    $numeric_data = array_filter($data, "is_numeric");
    

    To get a sequential index you can use

    $numeric_data = array_values($numeric_data);
    

    References
    PHP – Delete selected items from an array

    0 讨论(0)
  • 2021-02-07 20:31

    It depends. If want to remove an element without causing gaps in the indexes, you need to use array_splice:

    $a = array('a','b','c', 'd');
    array_splice($a, 2, 1);
    var_dump($a);
    

    Output:

    array(3) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      [2]=>
      string(1) "d"
    }
    

    Using unset can work, but this results in a non-continuous index. This can sometimes be a problem when you iterate over the array using count($a) - 1 as a measure of the upper bound:

    $a = array('a','b','c', 'd');
    unset($a[2]);
    var_dump($a);
    

    Output:

    array(3) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      [3]=>
      string(1) "d"
    }
    

    As you see, count is now 3 but the index of the last element is also 3.

    My recommendation is therefore to use array_splice for arrays with numerical indexes, and use unset only for arrays (dictionaries really) with non-numerical indexes.

    0 讨论(0)
  • 2021-02-07 20:34

    That depends:

    $a1 = array('a' => 1, 'b' => 2, 'c' => 3);
    unset($a1['b']);
    // array('a' => 1, 'c' => 3)
    
    $a2 = array(1, 2, 3);
    unset($a2[1]);
    // array(0 => 1, 2 => 3)
    // note the missing index 1
    
    // solution 1 for numeric arrays
    $a3 = array(1, 2, 3);
    array_splice($a3, 1, 1);
    // array(0 => 1, 1 => 3)
    // index is now continous
    
    // solution 2 for numeric arrays
    $a4 = array(1, 2, 3);
    unset($a4[1]);
    $a4 = array_values($a4);
    // array(0 => 1, 1 => 3)
    // index is now continous
    

    Generally unset() is safe for hashtables (string-indexed arrays), but if you have to rely on continous numeric indexes you'll have to use either array_splice() or a combination of unset() and array_values().

    0 讨论(0)
提交回复
热议问题