Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:116580 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 11071 invoked from network); 7 Dec 2021 00:43:46 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 7 Dec 2021 00:43:46 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id F3F3F18053C for ; Mon, 6 Dec 2021 17:43:48 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=BAYES_20,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Mon, 6 Dec 2021 17:43:48 -0800 (PST) Received: by mail-qk1-f170.google.com with SMTP id t6so13200989qkg.1 for ; Mon, 06 Dec 2021 17:43:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=QcrKva8vO2lmwh0UJWtJKS08DxW+Pol37R1muTsBLjE=; b=WKlfMtRtYF5PjfNa49yiQwoNF548yM8KcK1l6vVKE2/Y9V9iOfzjM5hJ6ynCWhqXF6 cvleVp7rset40Mud1ZAb25V/pIRpOPIhI1AVsxBHXFyh3fMMfq2I21oqj+H7fhEu44aB UPie+FLZUEfneNVhQjElSlQjoEtWtuma4Url2ENtCTM93Ypmk8v0GK7k8uDpVD2p9cNJ qzbEIT2DZrRX404v8nQdKJT8L/r5HRtdPY/0AzOHedmfgz2QHS5SjeGEyDys0X4LoV8h BZNYxbFtqWiRqWGS8Wjwu404fhIB/RvPFubsRl4BMP9pANvCv9qEGxHGeEg5QLrpyBCu 1WGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=QcrKva8vO2lmwh0UJWtJKS08DxW+Pol37R1muTsBLjE=; b=zgUdmVNqspKNDILYXaP+w8Bcx8DXH4o5gWwOLL3XWx7IQamQSAgn2levidzdVt9fIR 4NuMiLKxQAGjfJQox+bGW/mw1ZCjy8le/9pM9MuIhLtkLO5wl/7i5VwsKMVtGUZvODgw bcatKOWoYr0DyiNRGVldhUwi/6vrVo78+lOc+UTU5Ucfzt1xBPyLJ0rBWnJ4a3+4B41w ubXsWhBwdqIvWMNEyiTuesj3GWX3/km/SWHwNcaAi3zk0+NRczxJ+n7KzuJvRnjKRBzY xUGahEkaPV1nwnM+xadCZHTHC7JxGtETsIskpzgVKOrB675vrr9xcDh8y+UcXCLQfO2S AuuA== X-Gm-Message-State: AOAM531L6Gac+KeJhBB6OYH4lTNlOPOVYPLtKr6AukZHXRcr3gv0NvHx L0WlF/jqfTw4BPwj5n1lWiO17cy2VZwW4zKyFml8B6Kdpfgn1Q== X-Google-Smtp-Source: ABdhPJxJUnchtxvavzNiEq13jXG41uSSK4AxUOm+bJom2AugU2qoU2TrjzGgJhMEmCbeEf1iPQXAHCYw3Tepv8YXpYY= X-Received: by 2002:a05:620a:d56:: with SMTP id o22mr36069659qkl.753.1638841427637; Mon, 06 Dec 2021 17:43:47 -0800 (PST) MIME-Version: 1.0 References: <61ac9759.1c69fb81.b0241.1e6fSMTPIN_ADDED_MISSING@mx.google.com> <268F5B4F-4770-48AA-B212-DE23116BCF4C@gmail.com> <2e4dd298-77a1-4c40-ba31-1c9b7ebe1bb1@www.fastmail.com> In-Reply-To: <2e4dd298-77a1-4c40-ba31-1c9b7ebe1bb1@www.fastmail.com> Date: Tue, 7 Dec 2021 08:43:36 +0700 Message-ID: To: Larry Garfield Cc: php internals Content-Type: text/plain; charset="UTF-8" Subject: Re: [PHP-DEV] RFC [Discussion] array_column results grouping From: the.liquid.metal@gmail.com (Hendra Gunawan) Revision to my recommendation are: 1. signature: array_group( array|object $array, int|string|array $index_key, callable $reducer = null, callable $mapper = null, callable $filter = null, callable $sorter = null, ): array 2. `sorter` should be executed before `filter`, because as far as I can think, there is no way to do this by yourself. So the sequence should be: `sorter` > `filter` > `mapper`|`reducer` > > Better map/filter/reduce primitives in PHP would be dandy, but they have > nothing to do with array grouping. They're a separate operation that should > be composed with grouping. Packing them all into a single function sounds > like a terrible idea. > > If we wanted that... that's called list comprehensions, which I would > support and even tried to rally support for a few years ago, but got met > with a big shrug. :-) Suppose that my boss order me to provide statistical data of students. He wants a brief data companied with zoom button on each row. This buttons displays all fields in which brief data has, plus another zoom button on it's own row. And so on to some level. Additionally He wants the data not just by area division, but also by gender as a whole. // These are reducer $fnAvg = fn() => {/*...*/} $fnQ1 = fn() => {/*...*/} $fnQ2 = fn() => {/*...*/} $fnQ3 = fn() => {/*...*/} $fnLowest = fn() => {/*...*/} $fnHighest = fn() => {/*...*/} $dAvg = array_group($data, "district", $fnAvg); $dQ1 = array_group($data, "district", $fnQ1); $dQ2 = array_group($data, "district", $fnQ2); // ... and 3 others $wAvg = array_group($data, ["district", "ward"], $fnAvg); $wQ1 = array_group($data, ["district", "ward"], $fnQ1); $wQ2 = array_group($data, ["district", "ward"], $fnQ2); // ... and 3 others $cAvg = array_group($data, ["district", "ward", "cluster"], $fnAvg); $cQ1 = array_group($data, ["district", "ward", "cluster"], $fnQ1); $cQ2 = array_group($data, ["district", "ward", "cluster"], $fnQ2); // ... and 3 others $sAvg = array_group($data, "sex", $fnAvg); $sQ1 = array_group($data, "sex", $fnQ1); $sQ2 = array_group($data, "sex", $fnQ2); // ... and 3 others output: $dAvg = [ "district1" => 123, "district2" => 234, ... ]; $dQ1 = [ "district1" => 123, "district2" => 234, ... ]; ... $wAvg = [ "district1" => [ "ward1" => 123, "ward2" => 234, ], "district2" => [ "ward3" => 123, "ward4" => 234, ], ... ]; $wQ1 = [ "district1" => [ "ward1" => 123, "ward2" => 234, ], "district2" => [ "ward3" => 123, "ward4" => 234, ], ... ]; ... $sAvg = [ "female" => 123, "male" => 234, ... ]; $sQ1 = [ "female" => 123, "male" => 234, ... ]; `array_group` is just a simple handy tool which can manipulate a bunch of data without touching SQL, DQL, query builder, or any producer anymore just to align the output to the need. Best Regards Hendra Gunawan.