在PHP中使用数组作为数组的键

20jt8wwn  于 2023-06-04  发布在  PHP
关注(0)|答案(4)|浏览(255)

我需要在数组和数字之间创建一个关联;由于PHP缺少Map类型,我尝试使用数组来实现这一点:

$rowNumberbyRow = array();
$rowNumberByRow[$rowData] = $rowNumber;

然而,当我计算代码时,我得到以下错误:
Warning: Illegal offset type
需要注意的是,存储在数组($rowData)中的数据没有任何“唯一”值可以用作$rowNumberByRow数组的键。
谢谢!

**更新:**为了回答我的一些评论,我试图创建一个lookup table,以便我的应用程序可以在O(1)时间内找到给定行的行号。

myss37ts

myss37ts1#

PHP有一个map类:它被称为SplObjectStorage。它可以使用与一般数组完全相同的语法进行访问(参见the reference的示例2)。
但是要使用这个类,你必须使用the ArrayObject class而不是数组。它的处理方式与数组完全相同,您可以从数组构造示例(例如$arrayObject = new ArrayObject($array))。
如果你不想使用这些类,你也可以创建一个函数,为你的索引创建唯一的哈希字符串。例如:

function myHash($array){
   return implode('|',$array);
}
$rowNumberByRow[myHash($array)] = $rowNumber;

当然,你必须确保你的散列确实是唯一的,我强烈建议你使用SplObjectStorage,也许可以多读一点关于php的SPL类的知识。

mwkjh3gx

mwkjh3gx2#

为什么不直接将行号存储在数组中呢?例如:

$rowData['rowNumber'] = $rowNumber;

你可以序列化数组,例如:

$rowNumberByRow[serialize($rowData)] = $rowNumber;

然而,这是相当低效的。

ubof19bj

ubof19bj3#

在php中,只能使用标量值作为数组键。
如果你的$rowNumber是唯一的-那么你会尝试使用相反的关系方向。如果它不是唯一的-那么你没有任何可能的解决方案,我知道。

wvmv3b1j

wvmv3b1j4#

答案已经给出并被接受了,但是当我在寻找类似的问题时,我发现了这个问题,我觉得我应该写一行:当有人想使用一个数组的值作为另一个数组的键时,使用函数array_combine会很有用。
如果我得到的数组正确,你可以用途:

$rowNumberByRow = array_combine($rowData, $rowNumber);

请查看PHP手册,了解有关键的允许值的一些信息:)

相关问题