Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:67924 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 98130 invoked from network); 27 Jun 2013 08:27:55 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 27 Jun 2013 08:27:55 -0000 Authentication-Results: pb1.pair.com smtp.mail=florinpatan@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=florinpatan@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.219.48 as permitted sender) X-PHP-List-Original-Sender: florinpatan@gmail.com X-Host-Fingerprint: 209.85.219.48 mail-oa0-f48.google.com Received: from [209.85.219.48] ([209.85.219.48:37955] helo=mail-oa0-f48.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 49/E8-51393-987FBC15 for ; Thu, 27 Jun 2013 04:27:54 -0400 Received: by mail-oa0-f48.google.com with SMTP id f4so482840oah.7 for ; Thu, 27 Jun 2013 01:27:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=KW7rd0K5ZJJ7Dd/SWnAROt2AlVxPGrEPzpuf+8qBO8w=; b=bjMewdnHYQuNDcBZZZJTmO/uu0MHe0R4VfGv6B6LQ5vY+U3lP2ybmDGgMx5EmD1+Ja aA0YE9rzPQGi5wjVI3cqUAJU2QShTKzi8tsDkyiCfuB0nYL7HrJiXcELhW1oocZZqWIk AbenxW0a+nyvpA0Fi93Wbly9tOJF9pmb18eGNsbNpWdD0yU2w6AYVTjFmurp9SYI6iQr OaZ5ksLovu6E3Sy/hsPsDlXRAhTPYga0L9rkqB6EyGFdr9Z61cOwZJ5lnSIrEGRf4+FQ uAWhiB5uQJa4tNR4icv0DWnLUAqG31CmL3/MypAL8O2p1Zl+QkRQejHhUeB24OWsp3H6 d+Rg== X-Received: by 10.182.165.232 with SMTP id zb8mr3601132obb.101.1372321671576; Thu, 27 Jun 2013 01:27:51 -0700 (PDT) MIME-Version: 1.0 Received: by 10.76.18.161 with HTTP; Thu, 27 Jun 2013 01:27:21 -0700 (PDT) In-Reply-To: References: <4622f2d7-8c09-4a31-943e-7732a9481a9a@me.com> Date: Thu, 27 Jun 2013 10:27:21 +0200 Message-ID: To: Tjerk Anne Meesters Cc: Jeremy Curcio , PHP Internals Content-Type: text/plain; charset=UTF-8 Subject: Re: [PHP-DEV] Gauging Interest:RFC to add map() function From: florinpatan@gmail.com (Florin Patan) On Thu, Jun 27, 2013 at 10:17 AM, Tjerk Anne Meesters wrote: > On Wed, Jun 26, 2013 at 11:20 PM, Jeremy Curcio wrote: > >> Hello, >> >> I would like to submit an RFC to add a new function to the PHP language. >> The function would be called "map()". The purpose of this function would be >> to take an existing value within a range and make it to a corresponding >> location within a new range. >> >> The map() method would have 5 required parameters, $originalLow, >> $originalHigh, $newLow, $newHigh, and $value. >> >> map() would be implement the following: >> >> function map($originalLow, $originalHigh, $newLow, $newHigh, $value) { >> return $newLow + ($value - $originalLow) * ($newHigh - $newLow) / >> ($originalHigh- $originalLow); >> } >> >> > Purely from a development perspective, having five required function > arguments is bad; it can be reduced (by treating the first four as two > ranges) to three arguments, e.g. > > map([55, 92], [70, 100], 55); > > You can go one step further and call it what it is, not a mapper, but a > single dimensional range transformer and use a closure, e.g.: > > $transformer = get_1d_range_transformer([55, 92], [70, 100]); > echo $transformer(55); // get transformed value > > You might also benefit from an OOP approach. I won't paste it here, but > I've created a pastie for it: http://codepad.org/nGZv8GJa > > It's debatable whether this somewhat specialized code would need to be > coded at something other than the language level; in most likelihood you > won't gain any appreciable performance increase. > > >> Example: >> Let's say we are teachers and are grading final exams. We have a policy >> that the best score is 100, and the worst score is a 70. Students scored >> between 55 and 92. We want to easily re-score the exams to be within the >> new score range, so we would use the new map() function. Let's begin with >> mapping the lowest score: >> >> $newScore = map(55, 92, 70, 100, 55); //$newScore = 70 >> >> If we have all of our scores in an array: >> >> $scores = array(71, 65, 55, 85, 88, 86, 92, 77, 73); >> >> We could use a foreach loop to remap each value: >> >> $newScores = array(); >> foreach($score as $scores) { >> $newScores[] = map(55, 92, 70, 100, $score); >> } >> var_dump($newScores); >> /* >> array(9) { >> [0]=> >> float(82.972972972973) >> [1]=> >> float(78.108108108108) >> [2]=> >> int(70) >> [3]=> >> float(94.324324324324) >> [4]=> >> float(96.756756756757) >> [5]=> >> float(95.135135135135) >> [6]=> >> int(100) >> [7]=> >> float(87.837837837838) >> [8]=> >> float(84.594594594595) >> } >> */ >> >> Just like that, we have the new exam grades that fit our policy, within >> the proper scale, without having to do any of the messy math ourselves. >> >> While I do recognize that this is somewhat trivial to anyone who knows the >> proper formula, I feel as though it would serve the PHP community well. >> Much the same as the pow() or pi() functions do. I appreciate your thoughts >> on this matter and whether or not this is worth pursuing as an RFC. >> >> Thank you, >> Jeremy Curcio >> j.curcio@me.com >> > > > > -- > -- > Tjerk Hi, May I kindly ask why all the PHP users would want this function in the core? I've never needed such a function nor do I understand why we should have it. It's good for what? And as I understand, PHP delegates the math stuff to the underlying C implementation so why would it be faster having it in PHP core rather that in PHP userland? Thanks ---- Florin Patan https://github.com/dlsniper http://www.linkedin.com/in/florinpatan