我需要在数组和数字之间创建一个关联;由于PHP缺少Map类型,我尝试使用数组来实现这一点:
$rowNumberbyRow = array();
$rowNumberByRow[$rowData] = $rowNumber;
然而,当我计算代码时,我得到以下错误:Warning: Illegal offset type
需要注意的是,存储在数组($rowData
)中的数据没有任何“唯一”值可以用作$rowNumberByRow
数组的键。
谢谢!
**更新:**为了回答我的一些评论,我试图创建一个lookup table,以便我的应用程序可以在O(1)时间内找到给定行的行号。
4条答案
按热度按时间myss37ts1#
PHP有一个map类:它被称为SplObjectStorage。它可以使用与一般数组完全相同的语法进行访问(参见the reference的示例2)。
但是要使用这个类,你必须使用the ArrayObject class而不是数组。它的处理方式与数组完全相同,您可以从数组构造示例(例如
$arrayObject = new ArrayObject($array)
)。如果你不想使用这些类,你也可以创建一个函数,为你的索引创建唯一的哈希字符串。例如:
当然,你必须确保你的散列确实是唯一的,我强烈建议你使用SplObjectStorage,也许可以多读一点关于php的SPL类的知识。
mwkjh3gx2#
为什么不直接将行号存储在数组中呢?例如:
你可以序列化数组,例如:
然而,这是相当低效的。
ubof19bj3#
在php中,只能使用标量值作为数组键。
如果你的
$rowNumber
是唯一的-那么你会尝试使用相反的关系方向。如果它不是唯一的-那么你没有任何可能的解决方案,我知道。wvmv3b1j4#
答案已经给出并被接受了,但是当我在寻找类似的问题时,我发现了这个问题,我觉得我应该写一行:当有人想使用一个数组的值作为另一个数组的键时,使用函数array_combine会很有用。
如果我得到的数组正确,你可以用途:
请查看PHP手册,了解有关键的允许值的一些信息:)