如何获取数组';s引用,使其成为标量以用作数组键,并使其返回到PHP中的引用?

如何获取数组';s引用,使其成为标量以用作数组键,并使其返回到PHP中的引用?,php,arrays,reference,Php,Arrays,Reference,我需要引用一个数组,并以某种方式使其成为标量,以便它可以成为另一个数组的键。 该散列应该是可逆的,也就是说,将其再次转换为引用以操作原始数组。 这可能吗 例如: <?php $a = [1,2,3]; $b = hash_reference( $a ); $c = [$b => 'hi']; // this is legal because $b is a scalar $d = unhash_reference( $b ); // here $d is a reference to

我需要引用一个数组,并以某种方式使其成为标量,以便它可以成为另一个数组的键。
该散列应该是可逆的,也就是说,将其再次转换为引用以操作原始数组。
这可能吗

例如:

<?php
$a = [1,2,3];
$b = hash_reference( $a );
$c = [$b => 'hi']; // this is legal because $b is a scalar
$d = unhash_reference( $b );
// here $d is a reference to $a just like if: $d = &$a

理论上这是可能的,但我怀疑你为什么需要这样做

简单地说,字符串是一种标量类型,您可以将其用作数组键—您是否可以只对其进行json_编码($a)并将其用作数组键?json的使用很糟糕,但在您所述的示例问题中起作用

可以说,您最好将此需求包装在某种形式的类中。在这样做时,您可以将某种形式的数组与所讨论的数组进行匹配

我构建了这个粗糙的示例,这样至少您不会使用变量或其他全局范围

class LookupTable {
    protected $data = [];
    public function store($x) { 
        $id = uniqid();
        $this->data[$id] = $x;
        return $id;
    }
    public function retrieve($id) {
        return $this->data[$id];
    }
}

$t = new LookupTable();
$a = [1,2,3];
$b = $t->store($a);
$c = [$b => 'hi'];
$d = $t->retrieve($b);
$r = &$a;

var_dump($a === $d); // is it the same object.
var_dump($a === $r); // its still the same object.
var_dump($c); // scalar array index! woohoo!
var_dump($d); // hey look, same object! :)

序列化/取消序列化?json_encode/json_decode?我不认为在PHP中可以用这种方式处理引用,因为它们不像C指针。有什么解决办法吗?@uby是的,这就是我要找的,你能想出一个解决办法吗?@MarkBaker这些函数将序列化值,而不是数组的引用。此外,其中一个数组元素是lambda函数,无法序列化。@Petruza,看看Jack Skinner的答案,这似乎是一个不错的解决方案。请记住使用引用(他忘记了)
$a
$d
不是同一个对象/数组(如果编辑
$a
中的任何值,
$d
不会被修改)。您应该使用
LookupTable
类中的引用来修复它;当然,这是一个用法和实现的问题。
$a===$d
并不意味着它们是同一个对象,只是两个具有相同值的数组。我只是觉得你错过了要点,这里,即:参考文献,所以我指出了它,因为这是OP的要求。我认为这是一个非常好的解决方案,我只是建议一个小的修正:)