rfc:array_delete

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:array_delete [2012/08/22 18:41] – [Answer to criticism] yohgakirfc:array_delete [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 3: Line 3:
   * Date: 2012-08-21   * Date: 2012-08-21
   * Author:  Rasmus Schultz <rasmus@mindplay.dk>, Yasuo Ohgaki <yohgaki@ohgaki.net>/<yohgaki@php.net>   * Author:  Rasmus Schultz <rasmus@mindplay.dk>, Yasuo Ohgaki <yohgaki@ohgaki.net>/<yohgaki@php.net>
-  * Status: Under Discussion+  * Status: Inactive
   * First Published at: http://wiki.php.net/rfc/array_delete   * First Published at: http://wiki.php.net/rfc/array_delete
 ===== Introduction ===== ===== Introduction =====
Line 47: Line 47:
  
 To prevent accidental deletion, $strict defaults to true - note that this differs from array_search() where the most likely objective is to "find something". To prevent accidental deletion, $strict defaults to true - note that this differs from array_search() where the most likely objective is to "find something".
 +
 +Above example is inefficient, old PHP users should use array_walk().
 +
 +<code php>
 +function array_delete(&$array, $value, $strict = TRUE) {
 +    $count = 0;
 +    array_walk($array, function($item, $key) use (&$array, &$count, $value, $strict) {
 +        if ($strict) {
 +            if ($item === $value) {
 +                $count++;
 +                unset($array[$key]);
 +            }
 +        } else {
 +            if ($item == $value) {
 +                $count++;
 +                unset($array[$key]);
 +            }
 +        }
 +    };
 +    return $count;    
 +}
 +</code>
 +
 +Note for non internal programmers: array_walk() is not fool safe function. It will cause unwanted behavior if one reorder elements or delete elements to be processed next. Above example works as expected. i.e. Deleting currently working element is normal operation with zend hash.
  
 <code php>int array_delete_recursive(&$array, $value, $strict = TRUE)</code> <code php>int array_delete_recursive(&$array, $value, $strict = TRUE)</code>
Line 116: Line 140:
  
 It says so [[http://php.net/manual/en/function.array-walk.php#refsect1-function.array-walk-parameters | right in the manual]] (look under funcname's description). There is not currently a defined function that would allow you to delete elements from the array like this, hence the array_delete proposal. It says so [[http://php.net/manual/en/function.array-walk.php#refsect1-function.array-walk-parameters | right in the manual]] (look under funcname's description). There is not currently a defined function that would allow you to delete elements from the array like this, hence the array_delete proposal.
 +
 +=== Please add this ===
 +
 +I was needing something exactly like this!
  
 == Deleting CURRENTLY working element is OK == == Deleting CURRENTLY working element is OK ==
rfc/array_delete.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1