Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:62364 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 52014 invoked from network); 21 Aug 2012 21:36:10 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 21 Aug 2012 21:36:10 -0000 Authentication-Results: pb1.pair.com header.from=yohgaki@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=yohgaki@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 74.125.82.170 as permitted sender) X-PHP-List-Original-Sender: yohgaki@gmail.com X-Host-Fingerprint: 74.125.82.170 mail-we0-f170.google.com Received: from [74.125.82.170] ([74.125.82.170:46946] helo=mail-we0-f170.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id A6/F8-10139-94FF3305 for ; Tue, 21 Aug 2012 17:36:10 -0400 Received: by weyr1 with SMTP id r1so199840wey.29 for ; Tue, 21 Aug 2012 14:36:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; bh=lD6dXRMPQGBQC1GtYFni/Tapr4Ufx3OX10w/XCzFTFM=; b=09HKvtDcTslj9ySX8ZQHTz8LfXFUclPZ9E2nTJAKoxbufpnQX0leJxksQFCyuATcnV Ok0oRMltz4Xc8Kne6f43tnBCKZNouqWEUWwDR57ykreFshewqfzy1AHVl5OEtCeW/tqR vL9AvRJn9w24tOA0VB0btMcbgNiTLRa0hSjvC64jPfT74CGIo5tBYleUXR942DQ/rvk2 fq1dkp+64iJHwyXt4A2pObp8BvH6Lqy5jwvutUwTlIg+ZC6+JwrVGuZ+S8Ka7pDRHAnv n6yaLsaMXHlnHP7JIiU5dI23Z2USLrsCdoaTnMOMXfR86JaUed+ZnIbC0KIGGaeA/sxM lapA== Received: by 10.180.104.200 with SMTP id gg8mr86209wib.14.1345584966375; Tue, 21 Aug 2012 14:36:06 -0700 (PDT) MIME-Version: 1.0 Sender: yohgaki@gmail.com Received: by 10.223.86.201 with HTTP; Tue, 21 Aug 2012 14:35:25 -0700 (PDT) In-Reply-To: <5033FD9C.6080106@ajf.me> References: <5033E0BC.8040507@ajf.me> <5033EAAB.6090502@ajf.me> <5033F1EA.4070701@ajf.me> <5033FD9C.6080106@ajf.me> Date: Wed, 22 Aug 2012 06:35:25 +0900 X-Google-Sender-Auth: A2hV9NfbMOOHBh0hfzLUTNYQyYg Message-ID: To: Andrew Faulds Cc: Tjerk Anne Meesters , Rasmus Schultz , internals@lists.php.net Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [PHP-DEV] re: removing an item from an array From: yohgaki@ohgaki.net (Yasuo Ohgaki) 2012/8/22 Andrew Faulds : > On 21/08/12 22:18, Yasuo Ohgaki wrote: >> >> 2012/8/22 Andrew Faulds : >>> >>> 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. 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/ >