gpt4 book ai didi

php - 散列或映射如何在 PHP 中工作

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

在 Perl 语言中,我定义了一个 作为事物与另一事物之间的映射或元素的基本列表。如文档中所述..散列是一种基本数据类型。它使用 key 访问其内容。

所以从根本上说,散列与数组很接近。它们的初始化甚至看起来非常相似。

如果我要在 Perl 中创建一个映射,我可以做类似下面的事情来进行比较。

my %map = (
A => [qw(a b c d)],
B => [qw(c d f a)],
C => [qw(b d a e)],
);

my @keys = keys %map;
my %matches;

for my $k ( 1 .. @keys ) {
$matches{$_} |= 2**$k for @{$map{ $keys[$k-1] }};
}

for ( sort keys %matches ) {
my @found;
for my $k ( 1 .. @keys ) {
push @found, $keys[$k-1] if $matches{$_} & 2**$k;
}
print "$_ found in ", (@found? join(',', @found) : 0 ), "\n";
}

Output:
a found in A,C,B
b found in A,C
c found in A,B
d found in A,C,B
e found in C
f found in B

我想在 中找出实现性能和效率的最佳方法

最佳答案

如果我没理解错的话,您希望将您的 Perl 散列知识应用到 PHP。如果我是对的,那么……

在 PHP 中,“Perl 哈希”通常称为“关联数组”,PHP 将其实现为一个数组,该数组恰好将键作为索引,其值就像一个常规数组。查看PHP Array docs有关 PHP 如何让您使用这种(和其他)类型的数组的大量示例。

PHP 的优点在于它在处理数组方面非常灵活。您可以将数组定义为具有键值对,然后将其视为常规数组并忽略键,这样就可以正常工作。您可以混合搭配……它不会提示太多。

从哲学上讲,哈希或映射只是一种将离散的相关信息片段放在一起的方法。这就是大多数非原始数据结构的全部内容,并且 PHP 对您如何处理事情并不是很固执己见;它有很多内置的优化,并且在高效地完成这些类型的事情方面做得非常扎实。

回答与您的示例相关的问题:

1) 至于简单性(我认为您的意思)和可维护性,我认为您使用关联数组没有任何问题。如果一个数据集是成对的,那么键值对是表达这种类型数据的一种自然方式。

2) 至于最有效,就代码行数和脚本执行开销而言……好吧,使用这种映射对于 PHP 来说是一项微不足道的小任务。我认为处理它的任何其他方式都没有多大关系,PHP 可以毫无怨言地处理数以千计的它。现在,如果您可以避免使用正则表达式,另一方面...

3) 您确实在使用它。不要想太多 - 在 PHP 中,这只是一个“数组”,仅此而已。它是一个包含任意数量元素的变量,PHP 可以很好地处理多维或关联性。好吧,它几乎永远不会成为您遇到的任何问题的原因。

PHP 将在幕后非常合乎逻辑且高效地处理诸如散列/映射之类的事情,以至于该语言的全部要点的一部分是让您不必费心去思考这些事情。如果您以 block 的形式关联数据,请使用数组;如果数据成对出现,则使用键值对;如果成打出现,请使用“数组的数组”(一个多维数组,其中部分或全部元素是数组)。

PHP 不会做任何愚蠢的事情,比如仅仅因为你想使用键值对而产生大量开销,它有很多内置特性,比如 foreach $yourArray as $key => $value 以及您使用的函数,例如 array_keys() 和 array_values()。请随意使用它们 - 作为核心功能,它们通常都经过了非常好的优化!

关于php - 散列或映射如何在 PHP 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341493/

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