内置支持PHP中的集合?

dev*_*os1 48 php set

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

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

zrv*_*van 69

只是一个想法,如果你使用数组键而不是值,你将确保没有重复,这也允许轻松合并两个"集".

$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;
Run Code Online (Sandbox Code Playgroud)

  • 缺点是您使用额外的内存来设置值,但实际上并不需要这些值。 (3认同)
  • 作为这个想法的延续:`function sum_sets($a, $b){return array_keys(array_flip($a)+array_flip($b));} print_r(sum_sets(array(1,2,3), array(3, 4,5)));` (2认同)
  • 如果要将“对象”存储在“集合”中,则此方法将无效。“关联数组”不允许将“对象”作为键。 (2认同)
  • 我用`$ my_set ['a'] ='a'`而不是`$ my_set ['a'] ='1'`来插入值,所以我不在乎是否要求键或价值观。 (2认同)

Wil*_*ken 8

答案是否定的,PHP 内部没有本地集解决方案。有一个Set数据结构,但这不是基线 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);
Run Code Online (Sandbox Code Playgroud)