gpt4 book ai didi

php - 过滤数组以保留元素数最少且第一个和最后一个元素唯一的行

转载 作者:可可西里 更新时间:2023-11-01 13:26:53 25 4
gpt4 key购买 nike

我想从我的数组中删除行,以便我的结果是一个包含具有唯一第一个和最后一个元素的行的数组。如果两行(或更多行)的第一个值和最后一个值相同,我想保留元素数最少的行。

假设我有以下数组:

$var = [
[1, 2, 3],
[1, 3],
[1, 2, 4, 3],
[1, 3, 4]
];

我想要的是从 $var 中删除所有数组,这些数组的第一个和最后一个元素与另一个数组相同 $var 但有更多元素。

因为前三行都是以 1 开头并以 3 结尾,所以只有包含 [1, 3] 的第二行应该是保留。

第四行([1, 3, 4])唯一以1开始,以4结束,所以也应该是保留。

输出应该是:

[
[1, 3],
[1, 3, 4]
]

我正在寻找在内存和时间方面最有效的方法。 $var 最多可以有 100 个数组,每个单独的数组最多可以有 10 个元素。我想在所有两个元素之间使用某种比较 (for(i=0;...) for(j=i+1;...) complexCompareFunction();),但我相信这不是很有效。

最佳答案

使用currentend

$all = array();
foreach ($var as $idx=>$arr):
$first = current($arr);
$last = end($arr);
$size = count($arr);
$key = $first.'.'.$last;
if (isset($all[$key])):
if ($size > $all[$key]):
unset($var[$idx]);
else:
$all[$key] = $size;
endif;
else:
$all[$key] = $size;
endif;
endforeach;

ops ... 你可以在最后(再次)迭代以确保可以进一步删除已经缩小的数组

关于php - 过滤数组以保留元素数最少且第一个和最后一个元素唯一的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384509/

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