Re: re: removing an item from an array
| From: | Andrew Faulds | Date: | Tue, 21 Aug 2012 21:37:26 +0000 |
| Subject: | Re: re: removing an item from an array | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-62365@lists.php.net to get a copy of this message | ||
On 21/08/12 22:35, Yasuo Ohgaki wrote:
2012/8/22 Andrew Faulds <ajf@ajf.me>:Are we clear?On 21/08/12 22:18, Yasuo Ohgaki wrote:Already publicized more than a decade. IIRC, similar discussion was done years ago at least. I suppose it's time to add element deletion function based on values. If you don't understand how it could be useful, take a look at use cases of Ruby's delete_if. OK, but please don't subvert this. You want array_delete_if, I want array_delete. You want a functional method for deleting things. I want an atomic operation.2012/8/22 Andrew Faulds <ajf@ajf.me>:So publicise array_walk() then. Don't add a new function.Er, so you're advocating adding another method to do the same thing? Why?Because novices don't know about array_walk(). I think I've written this over and over in this thread.
Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net-- Andrew Faulds http://ajf.me/But we have array_walk().The whole point of this was to allow people to use arrays like sets, or easily remove list items. Not encourage people to use functional programming. Sure, people should use array_walk, but you've got to be kidding me if I you think I would honestly accept using this to remove array items by value: array_delete($array, function ($value) { return ($value == "that value"); }); I might as well use array_walk if we're going down this route. You seem to want to subvert the usefulness of this function and just provide an array_walk shorthand with less functionality. What I want is this: array_delete($array, "that value");I do not want this ;) What's wrong with extensible way? It's for PHP 5.5, not PHP 4.array_delete($array, function ($v) { return ($v == "that value"); }); We can use ==, ===, <, >, <=, =>, <==, ==>, !=, !==, and so on. We may pass them as parameter, array_delete($array, "that value", "!=="); but it does not look a modern way to do and it is not extensible like with callable.No, it is a modern way. Modern and functional are not one and the same.Besides, how often we would like to delete elements based on element's value? I guess it's not so often for most people.Uh, I thought that was the whole point of this suggestion. You seem to want to subvert the original intentions (making it easier to remove list items and treat arrays as sets), to providing a new functional mechanism for removing lots of array items satisfying a criteria.But adding a new function is NOT the solution. That is the job of documentation. That's like saying "people have no idea what strstr is, so let's make a new function with less functionality called string_position!".Much more readable, does what you expect, and provides a significant, noticeable value over array_walk here.array_walk() is easy to use, IMHO. People just don't know array_walk() can be used to delete elements because of it's name.As I wrote in sample code, new array_delete is an intuitive name and convenient than array_walk. They are like array_pop/array_push and array_slice/array_splice to me.It's nothing like those. array_pop() and array_push() are simple, they take an array and an item to add. What's so terrible and evil and complex about making array_delete() remove an item? Why does it have to be functional and overcomplicated to do something we can already do, instead of providing a simple and convenient mechanism to remove an item by value? I do not understand this. Especially since, by your method, you should also provide a key since it provides no method to check item's key. Sorry, I just do not understand how your suggestion is useful.Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net-- Andrew Faulds http://ajf.me/Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net-- Andrew Faulds http://ajf.me/As I mentioned earlier, array_walk() is the best way to delete elements with PHP more than a decade. It should be mentioned the Stack Overflow page, but it's not. It's just like adding array_pop()/array_push()/array_shift()/array_unshift() while we have array_slice()/array_splice(). Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net-- Andrew Faulds http://ajf.me/