Re: re: removing an item from an array

From: 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>:
On 21/08/12 22:18, Yasuo Ohgaki wrote:
2012/8/22 Andrew Faulds <ajf@ajf.me>:
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.
So publicise array_walk() then. Don't add a new function.
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.
Are we clear?
Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net
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.
But we have array_walk().
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.
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.
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!".
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
Regards, -- Yasuo Ohgaki yohgaki@ohgaki.net
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/
-- Andrew Faulds http://ajf.me/
-- Andrew Faulds http://ajf.me/
-- Andrew Faulds http://ajf.me/

« previous php.internals (#62365) next »