gpt4 book ai didi

php - Clojure 在 PHP 中的分区方式?

转载 作者:行者123 更新时间:2023-12-04 21:42:56 24 4
gpt4 key购买 nike

来自 FP 背景,现在正在学习 PHP 我自然会错过一些心爱的高阶函数。我想知道是否有类似 Clojure 的 partition-by在 PHP 中。这是它的作用的官方描述:

(partition-by f)(partition-by f coll)

Applies f [a function] to each value in coll, splitting it each time f returns a new value. Returns a lazy seq of partitions. Returns a stateful transducer when no collection is provided.



我并不真正关心懒惰和传感器部分(我想这在 PHP 中是不可能的,对吗?)我需要做的是转换这样的数组:
[["year" => 2019, "val" => "foo"],
["year" => 2019, "val" => "bar"],
["year" => 2020, "val" => "baz"],
["year" => 2020, "val" => "boo)"]]

进入这个:
[[["year" => 2019, "val" => "foo"],
["year" => 2019, "val" => "bar"]],
[["year" => 2020, "val" => "baz"],
["year" => 2020, "val" => "boo)"]]]

即我想通过这样的函数的结果对它们进行分组:
function getYear($pair)
{
return $pair["year"];
}

我还没有尝试过自己编写这样的代码,但我想知道 PHP 的函数库(甚至核心?)中是否存在这样的东西。

最佳答案

我不认为这作为语言功能存在。至少我没有或找不到任何东西。

但是,(除非我误解了)这应该给你你描述的结果,但需要注意的是初始数组必须首先按分区值排序:

$f = [
["year" => 2019, "val" => "foo"],
["year" => 2019, "val" => "bar"],
["year" => 2020, "val" => "baz"],
["year" => 2020, "val" => "boo)"]
];

var_dump(partitionMultidim($f, "year"));

function partitionMultidim(array $values, string $key):array{
$new = [];
$p = $values[0][$key]; // alternatively check if exists in loop and set if not
$partitionNum = 0;
foreach($values as $value){
// what is the current value?
$curPartitionVal = $value[$key]; // or getYear($b);
// has the value changed?
if ( $p !== $curPartitionVal ){
// set the next partition value
$p = $curPartitionVal;
// new partition index
$partitionNum++;
}
// add to the new array
$new[$partitionNum][] = $value;
}
return $new;
}

关于php - Clojure 在 PHP 中的分区方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59191930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com