I would like to get values for a collection of values:
>>> class Foo() {}
>>> $v = (object)[42];
>>> $a = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $b = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $data[$a] = 42;
>>> echo $data[$b]
42
I tried with SplObjectStorage
, but I need to convert $a
into an object and in this case $a != $b
because they are different instances:
$s = new SplObjectStorage()
$s[$a] = 42
echo $s[$b]
UnexpectedValueException with message 'Object not found'
How can I achieve this in PHP?
In Python I would have used:
>>> a = (1, 1, 2, 3, 5, Foo, 'o_o', hashable_object)
>>> b = (1, 1, 2, 3, 5, Foo, 'o_o', hashable_object)
>>> data[a] = 42
>>> print(data[b])
42
EDIT
One not very efficient working solution would be:
>>> class Foo() {}
>>> $v = (object)[42];
>>> $a = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $b = [1, 1, 2, 3, 5, Foo::class, 'o_o', $v]
>>> $data[serialize($a)] = 42;
>>> echo $data[serialize($b)]
42