问与答 内置对PHP集合的支持?

hardy · 2020-02-22 15:30:05 · 热度: 12

我正在寻找一种简单的方法来在 php 中创建一个数组,该数组将不允许重复输入,但允许轻松组合其他集合或数组。

我主要对语言中是否存在这样的功能感兴趣,因为编写自己的语言并不困难。 我只是不想,如果我不需要。

猜你喜欢:
共收到 5 条回复
lamar #1 · 2020-02-22 15:30:05

只是一个想法,如果您使用数组键而不是值,则可以确保没有重复项,这也可以轻松合并两个“集合”。

$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;
peyton #2 · 2020-02-22 15:30:06

答案是否定的,PHP中没有本机设置解决方案。 有一个true数据结构,但这不是基线PHP。

对于使用任何语言的地图(即关联数组)来实现集合,存在一种约定。 对于PHP,您应该使用true作为底值。

<?php

$left = [1=>true, 5=>true, 7=>true];
$right = [6=>true, 7=>true, 8=>true, 9=>true];

$union = $left + $right;
$intersection = array_intersect_assoc($left, $right);

var_dump($left, $right, $union, $intersection);
nick #3 · 2020-02-22 15:30:07

我也有这个问题,所以写了一个类:[https://github.com/jakewhiteley/php-set-object]

如建议的那样,它确实扩展了ArrayObject并允许插入/迭代/删除值,但在任何地方都没有使用array_unique()

实现基于EMCA 6 JavaScript中的MDN JS文档集。

cornell #4 · 2020-02-22 15:30:08

您可以使用array_combine删除重复项

$cars = array("Volvo", "BMW", "Toyota");
array_push($cars,"BMW");

$map = array_combine($cars, $cars);
rudy #5 · 2020-02-22 15:30:09

在Laravel中,Collection类中的方法unique可能会有所帮助。 从Laravel文档中:

$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册